Merge "Minimize allocations in the Kalman library" into androidx-main
diff --git a/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityComposeIssueRegistry.kt b/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityComposeIssueRegistry.kt
index 76b1f3e..097257b 100644
--- a/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityComposeIssueRegistry.kt
+++ b/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/ActivityComposeIssueRegistry.kt
@@ -30,7 +30,8 @@
     override val api = 14
     override val minApi = CURRENT_API
     override val issues get() = listOf(
-        ActivityResultLaunchDetector.LaunchDuringComposition
+        ActivityResultLaunchDetector.LaunchDuringComposition,
+        CollectProgressDetector.NoCollectCallFound
     )
     override val vendor = Vendor(
         vendorName = "Jetpack Activity Compose",
diff --git a/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/CollectProgressDetector.kt b/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/CollectProgressDetector.kt
new file mode 100644
index 0000000..add3c04
--- /dev/null
+++ b/activity/activity-compose-lint/src/main/java/androidx/activity/compose/lint/CollectProgressDetector.kt
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:Suppress("UnstableApiUsage")
+
+package androidx.activity.compose.lint
+
+import androidx.compose.lint.Name
+import androidx.compose.lint.Package
+import androidx.compose.lint.findUnreferencedParameters
+import androidx.compose.lint.isInPackageName
+import com.android.tools.lint.detector.api.Category
+import com.android.tools.lint.detector.api.Detector
+import com.android.tools.lint.detector.api.Implementation
+import com.android.tools.lint.detector.api.Issue
+import com.android.tools.lint.detector.api.JavaContext
+import com.android.tools.lint.detector.api.Scope
+import com.android.tools.lint.detector.api.Severity
+import com.android.tools.lint.detector.api.SourceCodeScanner
+import com.android.tools.lint.detector.api.computeKotlinArgumentMapping
+import com.intellij.psi.PsiMethod
+import java.util.EnumSet
+import org.jetbrains.kotlin.psi.KtLambdaExpression
+import org.jetbrains.kotlin.psi.KtSimpleNameExpression
+import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
+import org.jetbrains.uast.UCallExpression
+import org.jetbrains.uast.ULambdaExpression
+
+class CollectProgressDetector : Detector(), SourceCodeScanner {
+    override fun getApplicableMethodNames(): List<String> = listOf(
+        PredictiveBackHandler.shortName
+    )
+
+    override fun visitMethodCall(context: JavaContext, node: UCallExpression, method: PsiMethod) {
+        if (method.isInPackageName(PackageName)) {
+            // Find the back lambda
+            val backLambda = computeKotlinArgumentMapping(node, method)
+                .orEmpty()
+                .filter { (_, parameter) ->
+                    parameter.name == "onBack"
+                }
+                .keys
+                .filterIsInstance<ULambdaExpression>()
+                .firstOrNull() ?: return
+
+            // If the parameter is not referenced, immediately trigger the warning
+            val unreferencedParameter = backLambda.findUnreferencedParameters().firstOrNull()
+            if (unreferencedParameter != null) {
+                val location = unreferencedParameter.parameter
+                    ?.let { context.getLocation(it) }
+                    ?: context.getLocation(backLambda)
+                val name = unreferencedParameter.name
+                context.report(
+                    NoCollectCallFound,
+                    node,
+                    location,
+                    "You must call collect() on Flow $name"
+                )
+            } else {
+                // If the parameter is referenced, we need to make sure it calls collect()
+                val lambdaExpression = backLambda.sourcePsi as? KtLambdaExpression
+                // Find all of the reference inside of the lambda
+                val references =
+                    lambdaExpression?.functionLiteral
+                        ?.collectDescendantsOfType<KtSimpleNameExpression>()
+                // Make sure one of the references calls collect
+                val matchingReferences = references?.filter {
+                    it.getReferencedName() == Collect.shortName
+                }.orEmpty()
+                // If no references call collect(), trigger the warning
+                if (matchingReferences.isEmpty()) {
+                    val parameter = references?.firstOrNull()
+                    val location = parameter
+                        ?.let { context.getLocation(it) }
+                        ?: context.getLocation(backLambda)
+                    val name = lambdaExpression?.name
+                    context.report(
+                        NoCollectCallFound,
+                        node,
+                        location,
+                        "You must call collect() on Flow $name"
+                    )
+                }
+            }
+        }
+    }
+
+    companion object {
+        val NoCollectCallFound = Issue.create(
+            "NoCollectCallFound",
+            "You must call collect on the given progress flow when using PredictiveBackHandler",
+            "You must call collect on the progress in the onBack function. The collect call " +
+                "is what properly splits the callback so it knows what to do when the back " +
+                "gestures is started vs when it is completed. Failing to call collect will cause " +
+                "all code in the block to run when the gesture is started.",
+            Category.CORRECTNESS, 3, Severity.ERROR,
+            Implementation(
+                CollectProgressDetector::class.java,
+                EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES)
+            )
+        )
+    }
+}
+
+private val PackageName = Package("androidx.activity.compose")
+private val PredictiveBackHandler = Name(PackageName, "PredictiveBackHandler")
+private val CoroutinesPackage = Package("kotlinx.coroutines.flow.collect")
+private val Collect = Name(CoroutinesPackage, "collect")
diff --git a/activity/activity-compose-lint/src/test/java/androidx/activity/compose/lint/CollectProgressDetectorTest.kt b/activity/activity-compose-lint/src/test/java/androidx/activity/compose/lint/CollectProgressDetectorTest.kt
new file mode 100644
index 0000000..1ea7276
--- /dev/null
+++ b/activity/activity-compose-lint/src/test/java/androidx/activity/compose/lint/CollectProgressDetectorTest.kt
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.activity.compose.lint
+
+import androidx.compose.lint.test.Stubs
+import com.android.tools.lint.checks.infrastructure.LintDetectorTest
+import com.android.tools.lint.detector.api.Detector
+import com.android.tools.lint.detector.api.Issue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class CollectProgressDetectorTest : LintDetectorTest() {
+    override fun getDetector(): Detector = CollectProgressDetector()
+
+    override fun getIssues(): MutableList<Issue> =
+        mutableListOf(CollectProgressDetector.NoCollectCallFound)
+
+    private val PREDICTIVE_BACK_HANDLER = bytecode(
+        "libs/predictivebackhandler.jar",
+        kotlin(
+            """
+    package androidx.activity.compose
+
+    public fun PredictiveBackHandler(
+        enabled: Boolean = true,
+        onBack: (progress: String) -> Unit) { }
+    
+    """
+    ).indented(),
+        0xd7427505,
+    """
+    META-INF/main.kotlin_module:
+    H4sIAAAAAAAA/2NgYGBmYGBgBGJWKM3AZcIlmZiXUpSfmVKhl5hcklmWWVKp
+    l5yfW5BfnCokHlCUmpIJEk11SkzO9gCqzEkt8i7hEuXiBqrRS61IzC3ISRVi
+    C0ktLvEuUWLQYgAAnvRwIWUAAAA=
+    """,
+    """
+    androidx/activity/compose/PredictiveBackHandlerKt.class:
+    H4sIAAAAAAAA/4VSXU8TQRQ9s9222/JVFkGogCAoIMIWNOGhxkRNiI2lElEe
+    4GnYDnXodpbsTht8MfwNX/0HvhEfDPHRH2W8sy0fURLa5N479557zt078/vP
+    j58AnmGNYY2rehTK+onHfS07Un/2/LB1HMbC245EXZqkeMX95hsCBiJ6q7Ng
+    DIUj3uFewFXDe3dwJHzKphhGb2xhmF/cqzZDHUjlHXVa3mFbESZUsbfZi9bK
+    S7sMm7fCnq9Ur4R3dCRVo3zR8lFJXX6REM1Vw6jhHQl9EHFJ/VypUPMuVy3U
+    tXYQlBkyoTJTOsgxTF/TlUqLSPHAqyijEEs/zqKPvs7/JPxmr3+bR7wltPm6
+    hcXqv9so/z/m0m4/BjCYRz+GGLJC8YNA1BnYHsPMbdthmLpxtfN1ccjbgWbY
+    uH3Flf/HNEOlkcnDwhjD8AXDltC8zjUnXavVSdFbYcakadqmCSzKn0gTlSiq
+    0zPaPz+dzp+f5q2C1XV9iRu3KBzsescqPi2cnxatElt3HAJSlFqfLdjFKXfE
+    HS5lfn3L9DtZ13Ec13acxZxru4QtpY3EOqMZ4F4MeH0zYxfJyyupkaOCrcgz
+    OMdR2IhEHDOM37jE1Sbtz34d1gk8VJVK1NqtAxF9MBdkNEOfB7s8kubcS+Z2
+    ZENx3Y4onn/fVlq2REV1ZCypfDnHy6tnxzCwo0lyix/3KPI7YTvyxaY0h4ke
+    x26X4Voj1uhubJifhQlzWUhhiU5lOlvks8tu/gyF7wngMdkMLSpD/2WKx7oQ
+    DMNNKLLIYYTqTxJ0FivkcwZCawIKOdzBKMWGf6OnOzhpf/mKtF0uLp/hbldm
+    lWwKzEn0BmEegk2KaSKxqewloEWUyFeIbpwqE/tIVVCs4B5ZTFYwhekK7mNm
+    HyzGLB7sIx8jHWMuxnBiczHmk+BhjEcxFv4C1+LeOLYEAAA=
+    """
+    )
+
+    @Test
+    fun errors() {
+        lint().files(
+            kotlin(
+                """
+                package com.example
+
+                import androidx.compose.runtime.Composable
+                import androidx.activity.compose.PredictiveBackHandler
+
+                @Composable
+                fun Test() {
+                    PredictiveBackHandler { progress -> }
+                }
+
+                val lambda = @Composable {
+                    PredictiveBackHandler { progress -> }
+                }
+
+                val lambda2: @Composable () -> Unit = {
+                    PredictiveBackHandler { progress -> }
+                }
+
+                @Composable
+                fun LambdaParameter(content: @Composable () -> Unit) {}
+
+                @Composable
+                fun Test2() {
+                    LambdaParameter(content = {
+                        PredictiveBackHandler { progress -> }
+                    })
+                    LambdaParameter {
+                        PredictiveBackHandler { progress -> }
+                    }
+                }
+
+                fun test3() {
+                    val localLambda1 = @Composable {
+                        PredictiveBackHandler { progress -> }
+                    }
+
+                    val localLambda2: @Composable () -> Unit = {
+                        PredictiveBackHandler { progress -> }
+                    }
+                }
+            """
+            ),
+            Stubs.Composable,
+            PREDICTIVE_BACK_HANDLER
+        )
+            .run()
+            .expect(
+                """
+src/com/example/test.kt:9: Error: You must call collect() on Flow progress [NoCollectCallFound]
+                    PredictiveBackHandler { progress -> }
+                                            ~~~~~~~~
+src/com/example/test.kt:13: Error: You must call collect() on Flow progress [NoCollectCallFound]
+                    PredictiveBackHandler { progress -> }
+                                            ~~~~~~~~
+src/com/example/test.kt:17: Error: You must call collect() on Flow progress [NoCollectCallFound]
+                    PredictiveBackHandler { progress -> }
+                                            ~~~~~~~~
+src/com/example/test.kt:26: Error: You must call collect() on Flow progress [NoCollectCallFound]
+                        PredictiveBackHandler { progress -> }
+                                                ~~~~~~~~
+src/com/example/test.kt:29: Error: You must call collect() on Flow progress [NoCollectCallFound]
+                        PredictiveBackHandler { progress -> }
+                                                ~~~~~~~~
+src/com/example/test.kt:35: Error: You must call collect() on Flow progress [NoCollectCallFound]
+                        PredictiveBackHandler { progress -> }
+                                                ~~~~~~~~
+src/com/example/test.kt:39: Error: You must call collect() on Flow progress [NoCollectCallFound]
+                        PredictiveBackHandler { progress -> }
+                                                ~~~~~~~~
+7 errors, 0 warnings
+            """
+            )
+    }
+
+    @Test
+    fun errorWithNoCollect() {
+        lint().files(
+            kotlin(
+                """
+                package com.example
+
+                import androidx.compose.runtime.Composable
+                import androidx.activity.compose.PredictiveBackHandler
+
+                @Composable
+                fun Test() {
+                    PredictiveBackHandler { progress ->
+                        progress
+                    }
+                }
+            """
+            ),
+            Stubs.Composable,
+            PREDICTIVE_BACK_HANDLER
+        )
+            .run()
+            .expect(
+                """
+src/com/example/test.kt:10: Error: You must call collect() on Flow null [NoCollectCallFound]
+                        progress
+                        ~~~~~~~~
+1 errors, 0 warnings
+            """
+            )
+    }
+
+    @Test
+    fun noErrors() {
+        lint().files(
+            kotlin(
+                """
+                package com.example
+
+                import androidx.compose.runtime.Composable
+                import androidx.activity.compose.PredictiveBackHandler
+
+                @Composable
+                fun Test() {
+                    PredictiveBackHandler { progress ->
+                        progress.collect()
+                    }
+                }
+
+                val lambda = @Composable {
+                    PredictiveBackHandler { progress ->
+                        progress.collect()
+                    }
+                }
+
+                val lambda2: @Composable () -> Unit = {
+                    PredictiveBackHandler { progress ->
+                        progress.collect()
+                    }
+                }
+
+                @Composable
+                fun LambdaParameter(content: @Composable () -> Unit) {}
+
+                @Composable
+                fun Test2() {
+                    LambdaParameter(content = {
+                        PredictiveBackHandler { progress ->
+                            progress.collect()
+                        }
+                    })
+                    LambdaParameter {
+                        PredictiveBackHandler { progress ->
+                            progress.collect()
+                        }
+                    }
+                }
+
+                fun test3() {
+                    val localLambda1 = @Composable {
+                        PredictiveBackHandler { progress ->
+                            progress.collect()
+                        }
+                    }
+
+                    val localLambda2: @Composable () -> Unit = {
+                        PredictiveBackHandler { progress ->
+                            progress.collect()
+                        }
+                    }
+                }
+            """
+            ),
+            Stubs.Composable,
+            PREDICTIVE_BACK_HANDLER
+        )
+            .run()
+            .expectClean()
+    }
+}
diff --git a/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherTest.kt b/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherTest.kt
index afbe0ea..71d9294b 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherTest.kt
@@ -22,6 +22,8 @@
 import androidx.test.core.app.ActivityScenario
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.testutils.withActivity
 import androidx.testutils.withUse
@@ -442,6 +444,22 @@
         }
     }
 
+    /**
+     * Test to ensure that manually calling [ComponentActivity.onBackPressed] after
+     * [ComponentActivity] is DESTROYED does not cause an exception.
+     */
+    @SdkSuppress(minSdkVersion = 33, maxSdkVersion = 33)
+    @MediumTest
+    @Test
+    fun testCallOnBackPressedWhenDestroyed() {
+        with(ActivityScenario.launch(ContentViewActivity::class.java)) {
+            val realDispatcher = withActivity { onBackPressedDispatcher }
+            realDispatcher.dispatchOnBackStarted(BackEventCompat(0f, 0f, 0f, 0))
+            moveToState(Lifecycle.State.DESTROYED)
+            realDispatcher.onBackPressed()
+        }
+    }
+
     @Test
     fun testOnHasEnabledCallbacks() {
         var reportedHasEnabledCallbacks = false
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index de67431..65d0869 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -151,24 +151,7 @@
     private ViewModelStore mViewModelStore;
     private ViewModelProvider.Factory mDefaultFactory;
 
-    private final OnBackPressedDispatcher mOnBackPressedDispatcher =
-            new OnBackPressedDispatcher(new Runnable() {
-                @SuppressWarnings("deprecation")
-                @Override
-                public void run() {
-                    // Calling onBackPressed() on an Activity with its state saved can cause an
-                    // error on devices on API levels before 26. We catch that specific error
-                    // and throw all others.
-                    try {
-                        ComponentActivity.super.onBackPressed();
-                    } catch (IllegalStateException e) {
-                        if (!TextUtils.equals(e.getMessage(),
-                                "Can not perform this action after onSaveInstanceState")) {
-                            throw e;
-                        }
-                    }
-                }
-            });
+    private OnBackPressedDispatcher mOnBackPressedDispatcher = null;
 
     final ReportFullyDrawnExecutor mReportFullyDrawnExecutor = createFullyDrawnExecutor();
 
@@ -375,11 +358,6 @@
         mContextAwareHelper.dispatchOnContextAvailable(this);
         super.onCreate(savedInstanceState);
         ReportFragment.injectIfNeededIn(this);
-        if (Build.VERSION.SDK_INT >= 33) {
-            mOnBackPressedDispatcher.setOnBackInvokedDispatcher(
-                    Api33Impl.getOnBackInvokedDispatcher(this)
-            );
-        }
         if (mContentLayoutId != 0) {
             setContentView(mContentLayoutId);
         }
@@ -697,7 +675,7 @@
     @CallSuper
     @Deprecated
     public void onBackPressed() {
-        mOnBackPressedDispatcher.onBackPressed();
+        getOnBackPressedDispatcher().onBackPressed();
     }
 
     /**
@@ -708,6 +686,48 @@
     @NonNull
     @Override
     public final OnBackPressedDispatcher getOnBackPressedDispatcher() {
+        if (mOnBackPressedDispatcher == null) {
+            mOnBackPressedDispatcher = new OnBackPressedDispatcher(new Runnable() {
+                @SuppressWarnings("deprecation")
+                @Override
+                public void run() {
+                    // Calling onBackPressed() on an Activity with its state saved can cause an
+                    // error on devices on API levels before 26. We catch that specific error
+                    // and throw all others.
+                    try {
+                        ComponentActivity.super.onBackPressed();
+                    } catch (IllegalStateException e) {
+                        if (!TextUtils.equals(e.getMessage(),
+                                "Can not perform this action after onSaveInstanceState")) {
+                            throw e;
+                        }
+                    } catch (NullPointerException e) {
+                        if (!TextUtils.equals(e.getMessage(),
+                                "Attempt to invoke virtual method 'android.os.Handler "
+                                        + "android.app.FragmentHostCallback.getHandler()' on a "
+                                        + "null object reference")) {
+                            throw e;
+                        }
+                    }
+                }
+            });
+            getLifecycle().addObserver(new LifecycleEventObserver() {
+                @Override
+                public void onStateChanged(@NonNull LifecycleOwner lifecycleOwner,
+                        @NonNull Lifecycle.Event event) {
+                    if (event == Lifecycle.Event.ON_CREATE) {
+                        if (Build.VERSION.SDK_INT >= 33) {
+                            mOnBackPressedDispatcher.setOnBackInvokedDispatcher(
+                                    Api33Impl.getOnBackInvokedDispatcher(
+                                            (ComponentActivity) lifecycleOwner
+                                    )
+                            );
+                        }
+                    }
+                }
+            });
+
+        }
         return mOnBackPressedDispatcher;
     }
 
diff --git a/activity/buildSrc b/activity/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/activity/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/activity/settings.gradle b/activity/settings.gradle
index 91aede1..4e3742d 100644
--- a/activity/settings.gradle
+++ b/activity/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
@@ -36,4 +36,3 @@
         return false
     })
 }
-
diff --git a/annotation/annotation/api/current.ignore b/annotation/annotation/api/current.ignore
deleted file mode 100644
index 8c6aaac..0000000
--- a/annotation/annotation/api/current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-ParameterNameChange: androidx.annotation.InspectableProperty.ValueType#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.annotation.InspectableProperty.ValueType.valueOf
-ParameterNameChange: androidx.annotation.RestrictTo.Scope#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.annotation.RestrictTo.Scope.valueOf
diff --git a/annotation/annotation/api/restricted_current.ignore b/annotation/annotation/api/restricted_current.ignore
deleted file mode 100644
index 8c6aaac..0000000
--- a/annotation/annotation/api/restricted_current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-ParameterNameChange: androidx.annotation.InspectableProperty.ValueType#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.annotation.InspectableProperty.ValueType.valueOf
-ParameterNameChange: androidx.annotation.RestrictTo.Scope#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.annotation.RestrictTo.Scope.valueOf
diff --git a/appactions/builtintypes/builtintypes/api/current.txt b/appactions/builtintypes/builtintypes/api/current.txt
index 4e13658..2a8f29a 100644
--- a/appactions/builtintypes/builtintypes/api/current.txt
+++ b/appactions/builtintypes/builtintypes/api/current.txt
@@ -20,16 +20,16 @@
   @androidx.appsearch.annotation.Document(name="bitprop:DisambiguatingDescription") public final class DisambiguatingDescription {
     ctor public DisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue canonicalValue);
     ctor public DisambiguatingDescription(String text);
-    method public androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? getAsCanonicalValue();
+    method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? getAsCanonicalValue();
     method @androidx.appsearch.annotation.Document.StringProperty public String? getAsText();
     method public <R> R mapWhen(androidx.appactions.builtintypes.properties.DisambiguatingDescription.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? asCanonicalValue;
+    property @androidx.appsearch.annotation.Document.DocumentProperty public final androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? asCanonicalValue;
     property @androidx.appsearch.annotation.Document.StringProperty public final String? asText;
   }
 
-  public abstract static class DisambiguatingDescription.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
+  @androidx.appsearch.annotation.Document(name="bitprop:DisambiguatingDescription:CanonicalValue") public static class DisambiguatingDescription.CanonicalValue {
+    method @androidx.appsearch.annotation.Document.StringProperty public final String getTextValue();
+    property @androidx.appsearch.annotation.Document.StringProperty public final String textValue;
   }
 
   public static interface DisambiguatingDescription.Mapper<R> {
@@ -700,9 +700,7 @@
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
   }
 
-  public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
-    method public String getTextValue();
-    property public String textValue;
+  @androidx.appsearch.annotation.Document(name="bit:Alarm:DisambiguatingDescriptionValue", parent={DisambiguatingDescription.CanonicalValue::class}) public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
     field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue.Companion Companion;
     field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue FAMILY_BELL;
   }
diff --git a/appactions/builtintypes/builtintypes/api/restricted_current.txt b/appactions/builtintypes/builtintypes/api/restricted_current.txt
index 4e13658..2a8f29a 100644
--- a/appactions/builtintypes/builtintypes/api/restricted_current.txt
+++ b/appactions/builtintypes/builtintypes/api/restricted_current.txt
@@ -20,16 +20,16 @@
   @androidx.appsearch.annotation.Document(name="bitprop:DisambiguatingDescription") public final class DisambiguatingDescription {
     ctor public DisambiguatingDescription(androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue canonicalValue);
     ctor public DisambiguatingDescription(String text);
-    method public androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? getAsCanonicalValue();
+    method @androidx.appsearch.annotation.Document.DocumentProperty public androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? getAsCanonicalValue();
     method @androidx.appsearch.annotation.Document.StringProperty public String? getAsText();
     method public <R> R mapWhen(androidx.appactions.builtintypes.properties.DisambiguatingDescription.Mapper<R> mapper);
-    property public final androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? asCanonicalValue;
+    property @androidx.appsearch.annotation.Document.DocumentProperty public final androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue? asCanonicalValue;
     property @androidx.appsearch.annotation.Document.StringProperty public final String? asText;
   }
 
-  public abstract static class DisambiguatingDescription.CanonicalValue {
-    method public abstract String getTextValue();
-    property public abstract String textValue;
+  @androidx.appsearch.annotation.Document(name="bitprop:DisambiguatingDescription:CanonicalValue") public static class DisambiguatingDescription.CanonicalValue {
+    method @androidx.appsearch.annotation.Document.StringProperty public final String getTextValue();
+    property @androidx.appsearch.annotation.Document.StringProperty public final String textValue;
   }
 
   public static interface DisambiguatingDescription.Mapper<R> {
@@ -700,9 +700,7 @@
     method @androidx.appsearch.annotation.Document.BuilderProducer public androidx.appactions.builtintypes.types.Alarm.Builder<?> Builder();
   }
 
-  public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
-    method public String getTextValue();
-    property public String textValue;
+  @androidx.appsearch.annotation.Document(name="bit:Alarm:DisambiguatingDescriptionValue", parent={DisambiguatingDescription.CanonicalValue::class}) public static final class Alarm.DisambiguatingDescriptionValue extends androidx.appactions.builtintypes.properties.DisambiguatingDescription.CanonicalValue {
     field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue.Companion Companion;
     field public static final androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue FAMILY_BELL;
   }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/properties/DisambiguatingDescription.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/properties/DisambiguatingDescription.kt
index 2ed7b32..b442650 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/properties/DisambiguatingDescription.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/properties/DisambiguatingDescription.kt
@@ -13,6 +13,8 @@
 // limitations under the License.
 package androidx.appactions.builtintypes.properties
 
+import androidx.`annotation`.RestrictTo
+import androidx.`annotation`.RestrictTo.Scope.LIBRARY_GROUP
 import androidx.appsearch.`annotation`.Document
 import java.util.Objects
 import kotlin.Any
@@ -42,7 +44,9 @@
   /** The [String] variant, or null if constructed using a different variant. */
   @get:JvmName("asText") @get:Document.StringProperty public val asText: String? = null,
   /** The [CanonicalValue] variant, or null if constructed using a different variant. */
-  @get:JvmName("asCanonicalValue") public val asCanonicalValue: CanonicalValue? = null,
+  @get:JvmName("asCanonicalValue")
+  @get:Document.DocumentProperty
+  public val asCanonicalValue: CanonicalValue? = null,
   /** Required ctor param for the AppSearch compiler. */
   @Suppress("UNUSED_PARAMETER") identifier: String = "",
   /** Required ctor param for the AppSearch compiler. */
@@ -122,7 +126,33 @@
     public fun orElse(): R
   }
 
-  public abstract class CanonicalValue internal constructor() {
-    public abstract val textValue: String
+  /**
+   * Represents a canonical text value for [DisambiguatingDescription].
+   *
+   * @see androidx.appactions.builtintypes.types.Alarm.DisambiguatingDescriptionValue
+   */
+  @Document(name = "bitprop:DisambiguatingDescription:CanonicalValue")
+  public open class CanonicalValue
+  @RestrictTo(LIBRARY_GROUP)
+  constructor(
+    @get:Document.StringProperty public val textValue: String,
+  ) {
+    @get:RestrictTo(LIBRARY_GROUP)
+    @set:RestrictTo(LIBRARY_GROUP)
+    @Document.Id
+    public var identifier: String = ""
+
+    @get:RestrictTo(LIBRARY_GROUP)
+    @set:RestrictTo(LIBRARY_GROUP)
+    @Document.Namespace
+    public var namespace: String = ""
+
+    public override fun equals(other: Any?): Boolean {
+      if (this === other) return true
+      if (other !is CanonicalValue) return false
+      return textValue == other.textValue
+    }
+
+    public override fun hashCode(): Int = textValue.hashCode()
   }
 }
diff --git a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
index 25e5632..74967e2 100644
--- a/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
+++ b/appactions/builtintypes/builtintypes/src/main/java/androidx/appactions/builtintypes/types/Alarm.kt
@@ -90,16 +90,19 @@
   }
 
   /**
-   * A canonical value that may be assigned to [DisambiguatingDescription] properties in the context
-   * of [Alarm].
+   * A canonical value that may be assigned to [Alarm.disambiguatingDescription].
    *
    * Represents an open enum. See [Companion] for the different possible variants. More variants may
    * be added over time.
    */
+  @Document(
+    name = "bit:Alarm:DisambiguatingDescriptionValue",
+    parent = [DisambiguatingDescription.CanonicalValue::class],
+  )
   public class DisambiguatingDescriptionValue
   private constructor(
-    public override val textValue: String,
-  ) : DisambiguatingDescription.CanonicalValue() {
+    textValue: String,
+  ) : DisambiguatingDescription.CanonicalValue(textValue) {
     public override fun toString(): String = """Alarm.DisambiguatingDescriptionValue($textValue)"""
 
     public companion object {
diff --git a/appactions/interaction/interaction-capabilities-communication/lint-baseline.xml b/appactions/interaction/interaction-capabilities-communication/lint-baseline.xml
new file mode 100644
index 0000000..7226911
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-communication/lint-baseline.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            return ParamValue.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue("
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/communication/CreateCall.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            return ParamValue.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue("
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/communication/CreateMessage.kt"/>
+    </issue>
+
+</issues>
diff --git a/appactions/interaction/interaction-capabilities-core/lint-baseline.xml b/appactions/interaction/interaction-capabilities-core/lint-baseline.xml
new file mode 100644
index 0000000..c939b1a
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-core/lint-baseline.xml
@@ -0,0 +1,2956 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.newBuilder can only be called from within the same library (:)"
+        errorLine1="    ): AppAction = AppAction.newBuilder()"
+        errorLine2="                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="            .setName(capabilityName)"
+        errorLine2="             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="            .setIdentifier(identifier)"
+        errorLine2="             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllParams can only be called from within the same library (:)"
+        errorLine1="            .addAllParams("
+        errorLine2="             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTaskInfo can only be called from within the same library (:)"
+        errorLine1="            .setTaskInfo("
+        errorLine2="             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSupportsPartialFulfillment can only be called from within the same library (:)"
+        errorLine1="                TaskInfo.newBuilder().setSupportsPartialFulfillment(supportsPartialFulfillment)"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskInfo.newBuilder can only be called from within the same library (:)"
+        errorLine1="                TaskInfo.newBuilder().setSupportsPartialFulfillment(supportsPartialFulfillment)"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StructuredOutput.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val outputBuilder = FulfillmentResponse.StructuredOutput.newBuilder()"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addOutputValues can only be called from within the same library (:)"
+        errorLine1="                outputBuilder.addOutputValues("
+        errorLine2="                              ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                    FulfillmentResponse.StructuredOutput.OutputValue.newBuilder()"
+        errorLine2="                                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="                        .setName(entry.key)"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllValues can only be called from within the same library (:)"
+        errorLine1="                        .addAllValues(paramValues)"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/ActionSpecImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getType can only be called from within the same library (:)"
+        errorLine1="                fulfillment.type == Fulfillment.Type.UNKNOWN_TYPE ||"
+        errorLine2="                            ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getType can only be called from within the same library (:)"
+        errorLine1="                fulfillment.type == Fulfillment.Type.UNKNOWN_TYPE ||"
+        errorLine2="                            ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Type.UNKNOWN_TYPE can only be accessed from within the same library (:)"
+        errorLine1="                fulfillment.type == Fulfillment.Type.UNKNOWN_TYPE ||"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getType can only be called from within the same library (:)"
+        errorLine1="                fulfillment.type == Fulfillment.Type.UNRECOGNIZED"
+        errorLine2="                            ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getType can only be called from within the same library (:)"
+        errorLine1="                fulfillment.type == Fulfillment.Type.UNRECOGNIZED"
+        errorLine2="                            ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Type.UNRECOGNIZED can only be accessed from within the same library (:)"
+        errorLine1="                fulfillment.type == Fulfillment.Type.UNRECOGNIZED"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getSyncStatus can only be called from within the same library (:)"
+        errorLine1="                RequestMetadata(fulfillment.type, fulfillment.syncStatus)"
+        errorLine2="                                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getSyncStatus can only be called from within the same library (:)"
+        errorLine1="                RequestMetadata(fulfillment.type, fulfillment.syncStatus)"
+        errorLine2="                                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getType can only be called from within the same library (:)"
+        errorLine1="                RequestMetadata(fulfillment.type, fulfillment.syncStatus)"
+        errorLine2="                                            ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getType can only be called from within the same library (:)"
+        errorLine1="                RequestMetadata(fulfillment.type, fulfillment.syncStatus)"
+        errorLine2="                                            ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getParamsList can only be called from within the same library (:)"
+        errorLine1="            for (fp in fulfillment.paramsList) {"
+        errorLine2="                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getParamsList can only be called from within the same library (:)"
+        errorLine1="            for (fp in fulfillment.paramsList) {"
+        errorLine2="                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentParam.getFulfillmentValuesList can only be called from within the same library (:)"
+        errorLine1="                result[fp.name] = fp.fulfillmentValuesList"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentParam.getFulfillmentValuesList can only be called from within the same library (:)"
+        errorLine1="                result[fp.name] = fp.fulfillmentValuesList"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentParam.getName can only be called from within the same library (:)"
+        errorLine1="                result[fp.name] = fp.fulfillmentValuesList"
+        errorLine2="                          ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentParam.getName can only be called from within the same library (:)"
+        errorLine1="                result[fp.name] = fp.fulfillmentValuesList"
+        errorLine2="                          ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/ArgumentsWrapper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val builder = IntentParameter.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/BoundProperty.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="            .setName(slotName)"
+        errorLine2="             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/BoundProperty.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIsRequired can only be called from within the same library (:)"
+        errorLine1="            .setIsRequired(property.isRequiredForExecution)"
+        errorLine2="             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/BoundProperty.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEntityMatchRequired can only be called from within the same library (:)"
+        errorLine1="            .setEntityMatchRequired(property.shouldMatchPossibleValues)"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/BoundProperty.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIsProhibited can only be called from within the same library (:)"
+        errorLine1="            .setIsProhibited(!property.isSupported)"
+        errorLine2="             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/BoundProperty.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addPossibleEntities can only be called from within the same library (:)"
+        errorLine1="            builder.addPossibleEntities(it)"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/spec/BoundProperty.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                typeSpec.getIdentifier(obj)?.let { builder.setIdentifier(it) }"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                typeSpec.getIdentifier(obj)?.let { builder.setIdentifier(it) }"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.newBuilder can only be called from within the same library (:)"
+        errorLine1="            val builder = Entity.newBuilder()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStringValue() -> builder.stringValue = value.stringValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStringValue() -> builder.stringValue = value.stringValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBoolValue can only be called from within the same library (:)"
+        errorLine1="                value.hasBoolValue() -> builder.boolValue = value.boolValue"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBoolValue can only be called from within the same library (:)"
+        errorLine1="                value.hasBoolValue() -> builder.boolValue = value.boolValue"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setNumberValue can only be called from within the same library (:)"
+        errorLine1="                value.hasNumberValue() -> builder.numberValue = value.numberValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setNumberValue can only be called from within the same library (:)"
+        errorLine1="                value.hasNumberValue() -> builder.numberValue = value.numberValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStructValue() -> builder.structValue = value.structValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStructValue() -> builder.structValue = value.structValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/EntityConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="                converter.toSearchAction(request.request.searchAction)"
+        errorLine2="                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="                converter.toSearchAction(request.request.searchAction)"
+        errorLine2="                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getSearchAction can only be called from within the same library (:)"
+        errorLine1="                converter.toSearchAction(request.request.searchAction)"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getSearchAction can only be called from within the same library (:)"
+        errorLine1="                converter.toSearchAction(request.request.searchAction)"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.INVALID_ENTITY_ARGUMENT can only be accessed from within the same library (:)"
+        errorLine1="                return createResponse(GroundingResponse.Status.INVALID_ENTITY_ARGUMENT)"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="                .setPageSize(request.request.pageSize)"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="                .setPageSize(request.request.pageSize)"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getPageSize can only be called from within the same library (:)"
+        errorLine1="                .setPageSize(request.request.pageSize)"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getPageSize can only be called from within the same library (:)"
+        errorLine1="                .setPageSize(request.request.pageSize)"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="                .setPageToken(request.request.pageToken)"
+        errorLine2="                                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="                .setPageToken(request.request.pageToken)"
+        errorLine2="                                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getPageToken can only be called from within the same library (:)"
+        errorLine1="                .setPageToken(request.request.pageToken)"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getPageToken can only be called from within the same library (:)"
+        errorLine1="                .setPageToken(request.request.pageToken)"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingResponse.newBuilder can only be called from within the same library (:)"
+        errorLine1="        return GroundingResponse.newBuilder()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResponse can only be called from within the same library (:)"
+        errorLine1="            .setResponse(GroundingResponse.Response.newBuilder().setStatus(status))"
+        errorLine2="             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatus can only be called from within the same library (:)"
+        errorLine1="            .setResponse(GroundingResponse.Response.newBuilder().setStatus(status))"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Response.newBuilder can only be called from within the same library (:)"
+        errorLine1="            .setResponse(GroundingResponse.Response.newBuilder().setStatus(status))"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatus can only be called from within the same library (:)"
+        errorLine1="            GroundingResponse.Response.newBuilder().setStatus(GroundingResponse.Status.SUCCESS)"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Response.newBuilder can only be called from within the same library (:)"
+        errorLine1="            GroundingResponse.Response.newBuilder().setStatus(GroundingResponse.Status.SUCCESS)"
+        errorLine2="                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.SUCCESS can only be accessed from within the same library (:)"
+        errorLine1="            GroundingResponse.Response.newBuilder().setStatus(GroundingResponse.Status.SUCCESS)"
+        errorLine2="                                                                                       ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addCandidates can only be called from within the same library (:)"
+        errorLine1="            builder.addCandidates("
+        errorLine2="                    ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Candidate.newBuilder can only be called from within the same library (:)"
+        errorLine1="                GroundingResponse.Candidate.newBuilder()"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setGroundedEntity can only be called from within the same library (:)"
+        errorLine1="                    .setGroundedEntity("
+        errorLine2="                     ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResponse can only be called from within the same library (:)"
+        errorLine1="        return GroundingResponse.newBuilder().setResponse(builder.build()).build()"
+        errorLine2="                                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingResponse.newBuilder can only be called from within the same library (:)"
+        errorLine1="        return GroundingResponse.newBuilder().setResponse(builder.build()).build()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.CANCELED can only be accessed from within the same library (:)"
+        errorLine1="            EntityLookupResponse.CANCELED -> GroundingResponse.Status.CANCELED"
+        errorLine2="                                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.INVALID_PAGE_TOKEN can only be accessed from within the same library (:)"
+        errorLine1="            EntityLookupResponse.INVALID_PAGE_TOKEN -> GroundingResponse.Status.INVALID_PAGE_TOKEN"
+        errorLine2="                                                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.TIMEOUT can only be accessed from within the same library (:)"
+        errorLine1="            EntityLookupResponse.TIMEOUT -> GroundingResponse.Status.TIMEOUT"
+        errorLine2="                                                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.DEFAULT_UNKNOWN can only be accessed from within the same library (:)"
+        errorLine1="            else -> GroundingResponse.Status.DEFAULT_UNKNOWN"
+        errorLine2="                                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/entity/EntityProvider.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                typeSpec.getIdentifier(obj)?.let { builder.setIdentifier(it) }"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                typeSpec.getIdentifier(obj)?.let { builder.setIdentifier(it) }"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStringValue() -> builder.stringValue = paramValue.stringValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStringValue() -> builder.stringValue = paramValue.stringValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStringValue() -> builder.stringValue = paramValue.stringValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStringValue() -> builder.stringValue = paramValue.stringValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasStringValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStringValue() -> builder.stringValue = paramValue.stringValue"
+        errorLine2="                           ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasBoolValue() -> builder.boolValue = paramValue.boolValue"
+        errorLine2="                                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasBoolValue() -> builder.boolValue = paramValue.boolValue"
+        errorLine2="                                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasBoolValue() -> builder.boolValue = paramValue.boolValue"
+        errorLine2="                                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasBoolValue() -> builder.boolValue = paramValue.boolValue"
+        errorLine2="                                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasBoolValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasBoolValue() -> builder.boolValue = paramValue.boolValue"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasNumberValue() -> builder.numberValue = paramValue.numberValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasNumberValue() -> builder.numberValue = paramValue.numberValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasNumberValue() -> builder.numberValue = paramValue.numberValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasNumberValue() -> builder.numberValue = paramValue.numberValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasNumberValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasNumberValue() -> builder.numberValue = paramValue.numberValue"
+        errorLine2="                           ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStructValue() -> builder.structValue = paramValue.structValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStructValue() -> builder.structValue = paramValue.structValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStructValue() -> builder.structValue = paramValue.structValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStructValue() -> builder.structValue = paramValue.structValue"
+        errorLine2="                                                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasStructValue can only be called from within the same library (:)"
+        errorLine1="                paramValue.hasStructValue() -> builder.structValue = paramValue.structValue"
+        errorLine2="                           ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            val builder = ParamValue.newBuilder()"
+        errorLine2="                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStringValue() -> builder.stringValue = value.stringValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStringValue() -> builder.stringValue = value.stringValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBoolValue can only be called from within the same library (:)"
+        errorLine1="                value.hasBoolValue() -> builder.boolValue = value.boolValue"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBoolValue can only be called from within the same library (:)"
+        errorLine1="                value.hasBoolValue() -> builder.boolValue = value.boolValue"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setNumberValue can only be called from within the same library (:)"
+        errorLine1="                value.hasNumberValue() -> builder.numberValue = value.numberValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setNumberValue can only be called from within the same library (:)"
+        errorLine1="                value.hasNumberValue() -> builder.numberValue = value.numberValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStructValue() -> builder.structValue = value.structValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                value.hasStructValue() -> builder.structValue = value.structValue"
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/ParamValueConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            argumentsWrapper.paramValues.mapValues { entry -> entry.value.mapNotNull { it.value } }"
+        errorLine2="                                                                                          ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            argumentsWrapper.paramValues.mapValues { entry -> entry.value.mapNotNull { it.value } }"
+        errorLine2="                                                                                          ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartDictation can only be called from within the same library (:)"
+        errorLine1="            FulfillmentResponse.newBuilder().setStartDictation(executionResult.shouldStartDictation)"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentResponse.newBuilder can only be called from within the same library (:)"
+        errorLine1="            FulfillmentResponse.newBuilder().setStartDictation(executionResult.shouldStartDictation)"
+        errorLine2="                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExecutionOutput can only be called from within the same library (:)"
+        errorLine1="            fulfillmentResponseBuilder.setExecutionOutput("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/SingleTurnCapabilitySession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getIsRequired can only be called from within the same library (:)"
+        errorLine1="    ) = paramsList.filter { it.isRequired }.map { it.name }.all { finalArguments.containsKey(it) }"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getIsRequired can only be called from within the same library (:)"
+        errorLine1="    ) = paramsList.filter { it.isRequired }.map { it.name }.all { finalArguments.containsKey(it) }"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getName can only be called from within the same library (:)"
+        errorLine1="    ) = paramsList.filter { it.isRequired }.map { it.name }.all { finalArguments.containsKey(it) }"
+        errorLine2="                                                     ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getName can only be called from within the same library (:)"
+        errorLine1="    ) = paramsList.filter { it.isRequired }.map { it.name }.all { finalArguments.containsKey(it) }"
+        errorLine2="                                                     ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="            FulfillmentRequest.Fulfillment.FulfillmentValue.newBuilder().setValue(it).build()"
+        errorLine2="                                                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            FulfillmentRequest.Fulfillment.FulfillmentValue.newBuilder().setValue(it).build()"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatus can only be called from within the same library (:)"
+        errorLine1="        CurrentValue.newBuilder().setValue(paramValue).setStatus(status).build()"
+        errorLine2="                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="        CurrentValue.newBuilder().setValue(paramValue).setStatus(status).build()"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="        CurrentValue.newBuilder().setValue(paramValue).setStatus(status).build()"
+        errorLine2="                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val result = CurrentValue.newBuilder()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.hasValue can only be called from within the same library (:)"
+        errorLine1="        if (fulfillmentValue.hasValue()) {"
+        errorLine2="                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="            result.value = fulfillmentValue.value"
+        errorLine2="                   ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="            result.value = fulfillmentValue.value"
+        errorLine2="                   ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            result.value = fulfillmentValue.value"
+        errorLine2="                                            ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            result.value = fulfillmentValue.value"
+        errorLine2="                                            ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            result.value = fulfillmentValue.value"
+        errorLine2="                                            ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            result.value = fulfillmentValue.value"
+        errorLine2="                                            ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.hasDisambigData can only be called from within the same library (:)"
+        errorLine1="        if (fulfillmentValue.hasDisambigData()) {"
+        errorLine2="                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDisambiguationData can only be called from within the same library (:)"
+        errorLine1="            result.disambiguationData = fulfillmentValue.disambigData"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDisambiguationData can only be called from within the same library (:)"
+        errorLine1="            result.disambiguationData = fulfillmentValue.disambigData"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getDisambigData can only be called from within the same library (:)"
+        errorLine1="            result.disambiguationData = fulfillmentValue.disambigData"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getDisambigData can only be called from within the same library (:)"
+        errorLine1="            result.disambiguationData = fulfillmentValue.disambigData"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getDisambigData can only be called from within the same library (:)"
+        errorLine1="            result.disambiguationData = fulfillmentValue.disambigData"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getDisambigData can only be called from within the same library (:)"
+        errorLine1="            result.disambiguationData = fulfillmentValue.disambigData"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatus can only be called from within the same library (:)"
+        errorLine1="        return result.setStatus(status).build()"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.hasStructValue can only be called from within the same library (:)"
+        errorLine1="        if (groundedEntity.hasStructValue())"
+        errorLine2="                           ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            ParamValue.newBuilder()"
+        errorLine2="                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setIdentifier(groundedEntity.identifier)"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setIdentifier(groundedEntity.identifier)"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setIdentifier(groundedEntity.identifier)"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue(groundedEntity.structValue)"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue(groundedEntity.structValue)"
+        errorLine2="                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue(groundedEntity.structValue)"
+        errorLine2="                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            ParamValue.newBuilder()"
+        errorLine2="                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setIdentifier(groundedEntity.identifier)"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setIdentifier(groundedEntity.identifier)"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setIdentifier(groundedEntity.identifier)"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringValue can only be called from within the same library (:)"
+        errorLine1="                .setStringValue(groundedEntity.name)"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getName can only be called from within the same library (:)"
+        errorLine1="                .setStringValue(groundedEntity.name)"
+        errorLine2="                                               ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getName can only be called from within the same library (:)"
+        errorLine1="                .setStringValue(groundedEntity.name)"
+        errorLine2="                                               ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="        CurrentValue.newBuilder()"
+        errorLine2="                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="            .setValue(paramValue)"
+        errorLine2="             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatus can only be called from within the same library (:)"
+        errorLine1="            .setStatus(CurrentValue.Status.DISAMBIG)"
+        errorLine2="             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.DISAMBIG can only be accessed from within the same library (:)"
+        errorLine1="            .setStatus(CurrentValue.Status.DISAMBIG)"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDisambiguationData can only be called from within the same library (:)"
+        errorLine1="            .setDisambiguationData("
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllEntities can only be called from within the same library (:)"
+        errorLine1="                DisambiguationData.newBuilder().addAllEntities(disambiguationEntities)"
+        errorLine2="                                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DisambiguationData.newBuilder can only be called from within the same library (:)"
+        errorLine1="                DisambiguationData.newBuilder().addAllEntities(disambiguationEntities)"
+        errorLine2="                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getValueCase can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getValueCase can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getValueCase can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getValueCase can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.getNumber can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.getNumber can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.getNumber can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                                                        ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.getNumber can only be called from within the same library (:)"
+        errorLine1="        if (oldArg.valueCase.number != newArg.valueCase.number) {"
+        errorLine2="                                                        ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="        return if (oldArg.identifier != newArg.identifier) {"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="        return if (oldArg.identifier != newArg.identifier) {"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="        return if (oldArg.identifier != newArg.identifier) {"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="        return if (oldArg.identifier != newArg.identifier) {"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getValueCase can only be called from within the same library (:)"
+        errorLine1="            when (oldArg.valueCase) {"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getValueCase can only be called from within the same library (:)"
+        errorLine1="            when (oldArg.valueCase) {"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.VALUE_NOT_SET can only be accessed from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.VALUE_NOT_SET -> false"
+        errorLine2="                                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.STRING_VALUE -> oldArg.stringValue != newArg.stringValue"
+        errorLine2="                                                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.STRING_VALUE -> oldArg.stringValue != newArg.stringValue"
+        errorLine2="                                                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.STRING_VALUE -> oldArg.stringValue != newArg.stringValue"
+        errorLine2="                                                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStringValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.STRING_VALUE -> oldArg.stringValue != newArg.stringValue"
+        errorLine2="                                                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.STRING_VALUE can only be accessed from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.STRING_VALUE -> oldArg.stringValue != newArg.stringValue"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.BOOL_VALUE -> oldArg.boolValue != newArg.boolValue"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.BOOL_VALUE -> oldArg.boolValue != newArg.boolValue"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.BOOL_VALUE -> oldArg.boolValue != newArg.boolValue"
+        errorLine2="                                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getBoolValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.BOOL_VALUE -> oldArg.boolValue != newArg.boolValue"
+        errorLine2="                                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.BOOL_VALUE can only be accessed from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.BOOL_VALUE -> oldArg.boolValue != newArg.boolValue"
+        errorLine2="                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.NUMBER_VALUE -> oldArg.numberValue != newArg.numberValue"
+        errorLine2="                                                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.NUMBER_VALUE -> oldArg.numberValue != newArg.numberValue"
+        errorLine2="                                                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.NUMBER_VALUE -> oldArg.numberValue != newArg.numberValue"
+        errorLine2="                                                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getNumberValue can only be called from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.NUMBER_VALUE -> oldArg.numberValue != newArg.numberValue"
+        errorLine2="                                                                                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.NUMBER_VALUE can only be accessed from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.NUMBER_VALUE -> oldArg.numberValue != newArg.numberValue"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.STRUCT_VALUE can only be accessed from within the same library (:)"
+        errorLine1="                ParamValue.ValueCase.STRUCT_VALUE ->"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                        oldArg.structValue.toByteArray(),"
+        errorLine2="                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                        oldArg.structValue.toByteArray(),"
+        errorLine2="                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                        newArg.structValue.toByteArray()"
+        errorLine2="                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                        newArg.structValue.toByteArray()"
+        errorLine2="                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="        currentValues.all { it.status == CurrentValue.Status.ACCEPTED } &amp;&amp;"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="        currentValues.all { it.status == CurrentValue.Status.ACCEPTED } &amp;&amp;"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.ACCEPTED can only be accessed from within the same library (:)"
+        errorLine1="        currentValues.all { it.status == CurrentValue.Status.ACCEPTED } &amp;&amp;"
+        errorLine2="                                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                !hasParamValueDiff(currentValues[it].value, fulfillmentValues[it].value)"
+        errorLine2="                                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                !hasParamValueDiff(currentValues[it].value, fulfillmentValues[it].value)"
+        errorLine2="                                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                !hasParamValueDiff(currentValues[it].value, fulfillmentValues[it].value)"
+        errorLine2="                                                                                  ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                !hasParamValueDiff(currentValues[it].value, fulfillmentValues[it].value)"
+        errorLine2="                                                                                  ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                currentValue.status == CurrentValue.Status.ACCEPTED &amp;&amp;"
+        errorLine2="                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                currentValue.status == CurrentValue.Status.ACCEPTED &amp;&amp;"
+        errorLine2="                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.ACCEPTED can only be accessed from within the same library (:)"
+        errorLine1="                currentValue.status == CurrentValue.Status.ACCEPTED &amp;&amp;"
+        errorLine2="                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                    currentValue.value.hasStructValue()"
+        errorLine2="                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                    currentValue.value.hasStructValue()"
+        errorLine2="                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasStructValue can only be called from within the same library (:)"
+        errorLine1="                    currentValue.value.hasStructValue()"
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                        ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                        ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                                                         ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                                                         ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getStructValue can only be called from within the same library (:)"
+        errorLine1="                candidates[currentValue.value.identifier] = currentValue.value.structValue"
+        errorLine2="                                                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="            } else if (currentValue.status == CurrentValue.Status.DISAMBIG) {"
+        errorLine2="                                    ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="            } else if (currentValue.status == CurrentValue.Status.DISAMBIG) {"
+        errorLine2="                                    ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.DISAMBIG can only be accessed from within the same library (:)"
+        errorLine1="            } else if (currentValue.status == CurrentValue.Status.DISAMBIG) {"
+        errorLine2="                                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getDisambiguationData can only be called from within the same library (:)"
+        errorLine1="                for (entity in currentValue.disambiguationData.entitiesList) {"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getDisambiguationData can only be called from within the same library (:)"
+        errorLine1="                for (entity in currentValue.disambiguationData.entitiesList) {"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DisambiguationData.getEntitiesList can only be called from within the same library (:)"
+        errorLine1="                for (entity in currentValue.disambiguationData.entitiesList) {"
+        errorLine2="                                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DisambiguationData.getEntitiesList can only be called from within the same library (:)"
+        errorLine1="                for (entity in currentValue.disambiguationData.entitiesList) {"
+        errorLine2="                                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.hasStructValue can only be called from within the same library (:)"
+        errorLine1="                    if (entity.hasStructValue()) {"
+        errorLine2="                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                        candidates[entity.identifier] = entity.structValue"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                        candidates[entity.identifier] = entity.structValue"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getStructValue can only be called from within the same library (:)"
+        errorLine1="                        candidates[entity.identifier] = entity.structValue"
+        errorLine2="                                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getStructValue can only be called from within the same library (:)"
+        errorLine1="                        candidates[entity.identifier] = entity.structValue"
+        errorLine2="                                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                val paramValue = it.value"
+        errorLine2="                                    ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                val paramValue = it.value"
+        errorLine2="                                    ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasIdentifier can only be called from within the same library (:)"
+        errorLine1="                    paramValue.hasIdentifier() &amp;&amp;"
+        errorLine2="                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasStructValue can only be called from within the same library (:)"
+        errorLine1="                        !paramValue.hasStructValue() &amp;&amp;"
+        errorLine2="                                    ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                        candidates.containsKey(paramValue.identifier)"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                        candidates.containsKey(paramValue.identifier)"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="                        .setValue("
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                            paramValue.toBuilder().setStructValue(candidates[paramValue.identifier])"
+        errorLine2="                                                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                            paramValue.toBuilder().setStructValue(candidates[paramValue.identifier])"
+        errorLine2="                                                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                            paramValue.toBuilder().setStructValue(candidates[paramValue.identifier])"
+        errorLine2="                                                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskCapabilityUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.hasIdentifier can only be called from within the same library (:)"
+        errorLine1="            val GROUND_IF_NO_IDENTIFIER = { paramValue: ParamValue -> !paramValue.hasIdentifier() }"
+        errorLine2="                                                                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskHandler.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SyncStatus.UNKNOWN_SYNC_STATUS can only be accessed from within the same library (:)"
+        errorLine1="    private var lastKnownSyncStatus = SyncStatus.UNKNOWN_SYNC_STATUS"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppDialogState.newBuilder can only be called from within the same library (:)"
+        errorLine1="            AppActionsContext.AppDialogState.newBuilder()"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllParams can only be called from within the same library (:)"
+        errorLine1="                .addAllParams("
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getParamsList can only be called from within the same library (:)"
+        errorLine1="                        appAction.paramsList.map { intentParam ->"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getParamsList can only be called from within the same library (:)"
+        errorLine1="                        appAction.paramsList.map { intentParam ->"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DialogParameter.newBuilder can only be called from within the same library (:)"
+        errorLine1="                                AppActionsContext.DialogParameter.newBuilder()"
+        errorLine2="                                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="                                    .setName(intentParam.name)"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getName can only be called from within the same library (:)"
+        errorLine1="                                    .setName(intentParam.name)"
+        errorLine2="                                                         ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getName can only be called from within the same library (:)"
+        errorLine1="                                    .setName(intentParam.name)"
+        errorLine2="                                                         ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getName can only be called from within the same library (:)"
+        errorLine1="                            currentValuesMap[intentParam.name]?.let {"
+        errorLine2="                                                         ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="IntentParameter.getName can only be called from within the same library (:)"
+        errorLine1="                            currentValuesMap[intentParam.name]?.let {"
+        errorLine2="                                                         ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllCurrentValue can only be called from within the same library (:)"
+        errorLine1="                                dialogParameterBuilder.addAllCurrentValue(it)"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setFulfillmentIdentifier(appAction.identifier)"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setFulfillmentIdentifier(appAction.identifier)"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFulfillmentIdentifier can only be called from within the same library (:)"
+        errorLine1="                .setFulfillmentIdentifier(appAction.identifier)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Type.SYNC can only be accessed from within the same library (:)"
+        errorLine1="                FulfillmentRequest.Fulfillment.Type.SYNC ->"
+        errorLine2="                                                    ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Type.CANCEL can only be accessed from within the same library (:)"
+        errorLine1="                FulfillmentRequest.Fulfillment.Type.CANCEL -> {"
+        errorLine2="                                                    ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentResponse.getDefaultInstance can only be called from within the same library (:)"
+        errorLine1="                    FulfillmentResult(FulfillmentResponse.getDefaultInstance())"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.ACCEPTED can only be accessed from within the same library (:)"
+        errorLine1="                        TaskCapabilityUtils.toCurrentValue(it, CurrentValue.Status.ACCEPTED)"
+        errorLine2="                                                                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.DISAMBIG can only be accessed from within the same library (:)"
+        errorLine1="            if (!anyParamsOfStatus(CurrentValue.Status.DISAMBIG)) {"
+        errorLine2="                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TouchEventMetadata.getDefaultInstance can only be called from within the same library (:)"
+        errorLine1="                    TouchEventMetadata.getDefaultInstance(),"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.REJECTED can only be accessed from within the same library (:)"
+        errorLine1="            anyParamsOfStatus(CurrentValue.Status.REJECTED) ||"
+        errorLine2="                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getParamsList can only be called from within the same library (:)"
+        errorLine1="            !TaskCapabilityUtils.isSlotFillingComplete(finalArguments, appAction.paramsList) ||"
+        errorLine2="                                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getParamsList can only be called from within the same library (:)"
+        errorLine1="            !TaskCapabilityUtils.isSlotFillingComplete(finalArguments, appAction.paramsList) ||"
+        errorLine2="                                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SyncStatus.SLOTS_COMPLETE can only be accessed from within the same library (:)"
+        errorLine1="            lastKnownSyncStatus != SyncStatus.SLOTS_COMPLETE"
+        errorLine2="                                              ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentResponse.getDefaultInstance can only be called from within the same library (:)"
+        errorLine1="            return FulfillmentResponse.getDefaultInstance()"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SyncStatus.SLOTS_INCOMPLETE can only be accessed from within the same library (:)"
+        errorLine1="            SyncStatus.SLOTS_INCOMPLETE,"
+        errorLine2="                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SyncStatus.SLOTS_COMPLETE can only be accessed from within the same library (:)"
+        errorLine1="            SyncStatus.SLOTS_COMPLETE,"
+        errorLine2="                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SyncStatus.INTENT_CONFIRMED can only be accessed from within the same library (:)"
+        errorLine1="            SyncStatus.INTENT_CONFIRMED"
+        errorLine2="                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.PENDING can only be accessed from within the same library (:)"
+        errorLine1="                CurrentValue.Status.PENDING,"
+        errorLine2="                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                    currentValues.all { it.status == CurrentValue.Status.ACCEPTED }"
+        errorLine2="                                           ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                    currentValues.all { it.status == CurrentValue.Status.ACCEPTED }"
+        errorLine2="                                           ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.ACCEPTED can only be accessed from within the same library (:)"
+        errorLine1="                    currentValues.all { it.status == CurrentValue.Status.ACCEPTED }"
+        errorLine2="                                                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            .mapValues { currentValue -> currentValue.value.map { it.value } }"
+        errorLine2="                                                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            .mapValues { currentValue -> currentValue.value.map { it.value } }"
+        errorLine2="                                                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                    currentValues.any { it.status == CurrentValue.Status.PENDING }"
+        errorLine2="                                           ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                    currentValues.any { it.status == CurrentValue.Status.PENDING }"
+        errorLine2="                                           ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.PENDING can only be accessed from within the same library (:)"
+        errorLine1="                    currentValues.any { it.status == CurrentValue.Status.PENDING }"
+        errorLine2="                                                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            .mapValues { currentValues -> currentValues.value.map { it.value } }"
+        errorLine2="                                                                       ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            .mapValues { currentValues -> currentValues.value.map { it.value } }"
+        errorLine2="                                                                       ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                currentValues.any { it.status == status }"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getStatus can only be called from within the same library (:)"
+        errorLine1="                currentValues.any { it.status == status }"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentResponse.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val fulfillmentResponse = FulfillmentResponse.newBuilder()"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setConfirmationData can only be called from within the same library (:)"
+        errorLine1="        convertToConfirmationOutput(result)?.let { fulfillmentResponse.confirmationData = it }"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setConfirmationData can only be called from within the same library (:)"
+        errorLine1="        convertToConfirmationOutput(result)?.let { fulfillmentResponse.confirmationData = it }"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartDictation can only be called from within the same library (:)"
+        errorLine1="            FulfillmentResponse.newBuilder().setStartDictation(result.shouldStartDictation)"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentResponse.newBuilder can only be called from within the same library (:)"
+        errorLine1="            FulfillmentResponse.newBuilder().setStartDictation(result.shouldStartDictation)"
+        errorLine2="                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExecutionOutput can only be called from within the same library (:)"
+        errorLine1="        convertToExecutionOutput(result)?.let { fulfillmentResponse.executionOutput = it }"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExecutionOutput can only be called from within the same library (:)"
+        errorLine1="        convertToExecutionOutput(result)?.let { fulfillmentResponse.executionOutput = it }"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StructuredOutput.newBuilder can only be called from within the same library (:)"
+        errorLine1="        return FulfillmentResponse.StructuredOutput.newBuilder()"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllOutputValues can only be called from within the same library (:)"
+        errorLine1="            .addAllOutputValues("
+        errorLine2="             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                    FulfillmentResponse.StructuredOutput.OutputValue.newBuilder()"
+        errorLine2="                                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="                        .setName(it.key)"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllValues can only be called from within the same library (:)"
+        errorLine1="                        .addAllValues(it.value.invoke(confirmation))"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskOrchestrator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                        TaskCapabilityUtils.toCurrentValue(it.value, CurrentValue.Status.ACCEPTED)"
+        errorLine2="                                                              ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                        TaskCapabilityUtils.toCurrentValue(it.value, CurrentValue.Status.ACCEPTED)"
+        errorLine2="                                                              ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.ACCEPTED can only be accessed from within the same library (:)"
+        errorLine1="                        TaskCapabilityUtils.toCurrentValue(it.value, CurrentValue.Status.ACCEPTED)"
+        errorLine2="                                                                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getDefaultInstance can only be called from within the same library (:)"
+        errorLine1="        var groundingResult = AppGroundingResult.ofSuccess(ParamValue.getDefaultInstance())"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.hasDisambiguationData can only be called from within the same library (:)"
+        errorLine1="            if (pendingValue.hasDisambiguationData()) {"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            } else if (taskParamBinding.groundingPredicate.invoke(pendingValue.value)) {"
+        errorLine2="                                                                               ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            } else if (taskParamBinding.groundingPredicate.invoke(pendingValue.value)) {"
+        errorLine2="                                                                               ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                groundedValues.add(pendingValue.value)"
+        errorLine2="                                                ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="                groundedValues.add(pendingValue.value)"
+        errorLine2="                                                ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getDisambiguationData can only be called from within the same library (:)"
+        errorLine1="                renderAssistantDisambigData(pendingValue.disambiguationData, taskParamBinding)"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getDisambiguationData can only be called from within the same library (:)"
+        errorLine1="                renderAssistantDisambigData(pendingValue.disambiguationData, taskParamBinding)"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                    CurrentValue.newBuilder(pendingValue)"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatus can only be called from within the same library (:)"
+        errorLine1="                        .setStatus(CurrentValue.Status.DISAMBIG)"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.DISAMBIG can only be accessed from within the same library (:)"
+        errorLine1="                        .setStatus(CurrentValue.Status.DISAMBIG)"
+        errorLine2="                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            AppGroundingResult.Kind.SUCCESS -> ground(pendingValue.value, taskParamBinding)"
+        errorLine2="                                                                   ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CurrentValue.getValue can only be called from within the same library (:)"
+        errorLine1="            AppGroundingResult.Kind.SUCCESS -> ground(pendingValue.value, taskParamBinding)"
+        errorLine2="                                                                   ~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DisambiguationData.getEntitiesList can only be called from within the same library (:)"
+        errorLine1="        val entityIds = disambiguationData.entitiesList.map { it.identifier }"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DisambiguationData.getEntitiesList can only be called from within the same library (:)"
+        errorLine1="        val entityIds = disambiguationData.entitiesList.map { it.identifier }"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="        val entityIds = disambiguationData.entitiesList.map { it.identifier }"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.getIdentifier can only be called from within the same library (:)"
+        errorLine1="        val entityIds = disambiguationData.entitiesList.map { it.identifier }"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.ACCEPTED can only be accessed from within the same library (:)"
+        errorLine1="                        CurrentValue.Status.ACCEPTED,"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.REJECTED can only be accessed from within the same library (:)"
+        errorLine1="                        CurrentValue.Status.REJECTED,"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.REJECTED can only be accessed from within the same library (:)"
+        errorLine1="                        CurrentValue.Status.REJECTED,"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/task/TaskSlotProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                    return ParamValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringValue can only be called from within the same library (:)"
+        errorLine1="                        .setStringValue(value.getTextValue())"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                    String identifier = paramValue.getIdentifier();"
+        errorLine2="                                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.newBuilder can only be called from within the same library (:)"
+        errorLine1="                    Entity.newBuilder()"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                            .setIdentifier(stringValue.getName())"
+        errorLine2="                             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="                            .setName(stringValue.getName())"
+        errorLine2="                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllAlternateNames can only be called from within the same library (:)"
+        errorLine1="                            .addAllAlternateNames(stringValue.getAlternateNames())"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                            Entity.newBuilder().setIdentifier(callFormat.getTextValue()).build();"
+        errorLine2="                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.newBuilder can only be called from within the same library (:)"
+        errorLine1="                            Entity.newBuilder().setIdentifier(callFormat.getTextValue()).build();"
+        errorLine2="                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                    if (supportedValue.toString().equals(paramValue.getIdentifier())) {"
+        errorLine2="                                                                    ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.getIdentifier can only be called from within the same library (:)"
+        errorLine1="                        + &quot;Value because identifier &quot; + paramValue.getIdentifier() + &quot; is not &quot;"
+        errorLine2="                                                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                        return ParamValue.newBuilder().setIdentifier(obj.toString()).build();"
+        errorLine2="                                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                        return ParamValue.newBuilder().setIdentifier(obj.toString()).build();"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                        return Entity.newBuilder().setIdentifier(obj.toString()).build();"
+        errorLine2="                                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Entity.newBuilder can only be called from within the same library (:)"
+        errorLine1="                        return Entity.newBuilder().setIdentifier(obj.toString()).build();"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/core/impl/converters/TypeConverters.java"/>
+    </issue>
+
+</issues>
diff --git a/appactions/interaction/interaction-capabilities-productivity/lint-baseline.xml b/appactions/interaction/interaction-capabilities-productivity/lint-baseline.xml
new file mode 100644
index 0000000..1226f52
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-productivity/lint-baseline.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/productivity/UpdateAlarm.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                    .setStructValue("
+        errorLine2="                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/productivity/UpdateAlarm.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/productivity/UpdateAlarm.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                    .setStructValue("
+        errorLine2="                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/productivity/UpdateAlarm.kt"/>
+    </issue>
+
+</issues>
diff --git a/appactions/interaction/interaction-capabilities-safety/lint-baseline.xml b/appactions/interaction/interaction-capabilities-safety/lint-baseline.xml
new file mode 100644
index 0000000..624cdec
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-safety/lint-baseline.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            return ParamValue.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue("
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StartEmergencySharing.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            return ParamValue.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue("
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StartSafetyCheck.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            return ParamValue.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue("
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StopEmergencySharing.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="            return ParamValue.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="                .setStructValue("
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/safety/StopSafetyCheck.kt"/>
+    </issue>
+
+</issues>
diff --git a/appactions/interaction/interaction-capabilities-testing/lint-baseline.xml b/appactions/interaction/interaction-capabilities-testing/lint-baseline.xml
new file mode 100644
index 0000000..37a7a31
--- /dev/null
+++ b/appactions/interaction/interaction-capabilities-testing/lint-baseline.xml
@@ -0,0 +1,427 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val builder = Fulfillment.newBuilder()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="            val paramBuilder = FulfillmentParam.newBuilder().setName(key)"
+        errorLine2="                                                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentParam.newBuilder can only be called from within the same library (:)"
+        errorLine1="            val paramBuilder = FulfillmentParam.newBuilder().setName(key)"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addParams can only be called from within the same library (:)"
+        errorLine1="                builder.addParams("
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addFulfillmentValues can only be called from within the same library (:)"
+        errorLine1="                    paramBuilder.addFulfillmentValues("
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="                        FulfillmentValue.newBuilder().setValue(value).build()"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                        FulfillmentValue.newBuilder().setValue(value).build()"
+        errorLine2="                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setNumberValue can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setNumberValue(argVal.toDouble()).build()"
+        errorLine2="                                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setNumberValue(argVal.toDouble()).build()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setNumberValue can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setNumberValue(argVal).build()"
+        errorLine2="                                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setNumberValue(argVal).build()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringValue can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setStringValue(argVal).build()"
+        errorLine2="                                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setStringValue(argVal).build()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setIdentifier(argVal.toString()).build()"
+        errorLine2="                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                return ParamValue.newBuilder().setIdentifier(argVal.toString()).build()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue can only be accessed from within the same library (:)"
+        errorLine1="            is ParamValue -> {"
+        errorLine2="               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParamValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="        return ParamValue.newBuilder()"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStructValue can only be called from within the same library (:)"
+        errorLine1="            .setStructValue("
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SyncStatus.SLOTS_COMPLETE can only be accessed from within the same library (:)"
+        errorLine1="        return buildRequestArgs(type, Fulfillment.SyncStatus.SLOTS_COMPLETE, *args)"
+        errorLine2="                                                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllParams can only be called from within the same library (:)"
+        errorLine1="        val builder = Fulfillment.newBuilder().addAllParams(buildFulfillmentParams(*args))"
+        errorLine2="                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val builder = Fulfillment.newBuilder().addAllParams(buildFulfillmentParams(*args))"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Type.UNRECOGNIZED can only be accessed from within the same library (:)"
+        errorLine1="        if (type != Fulfillment.Type.UNRECOGNIZED) {"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setType can only be called from within the same library (:)"
+        errorLine1="            builder.type = type"
+        errorLine2="                    ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setType can only be called from within the same library (:)"
+        errorLine1="            builder.type = type"
+        errorLine2="                    ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Type.SYNC can only be accessed from within the same library (:)"
+        errorLine1="            if (type == Fulfillment.Type.SYNC &amp;&amp;"
+        errorLine2="                                         ~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SyncStatus.UNRECOGNIZED can only be accessed from within the same library (:)"
+        errorLine1="                syncStatus != Fulfillment.SyncStatus.UNRECOGNIZED) {"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSyncStatus can only be called from within the same library (:)"
+        errorLine1="                builder.syncStatus = syncStatus"
+        errorLine2="                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSyncStatus can only be called from within the same library (:)"
+        errorLine1="                builder.syncStatus = syncStatus"
+        errorLine2="                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="            val paramBuilder = FulfillmentParam.newBuilder().setName(key)"
+        errorLine2="                                                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentParam.newBuilder can only be called from within the same library (:)"
+        errorLine1="            val paramBuilder = FulfillmentParam.newBuilder().setName(key)"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addFulfillmentValues can only be called from within the same library (:)"
+        errorLine1="                    paramBuilder.addFulfillmentValues("
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="                        FulfillmentValue.newBuilder().setValue(value).build()"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="                        FulfillmentValue.newBuilder().setValue(value).build()"
+        errorLine2="                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/internal/ArgumentUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentRequest.getFulfillments can only be called from within the same library (:)"
+        errorLine1="    val fulfillment = fulfillmentRequest.getFulfillments(0)"
+        errorLine2="                                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addFulfillments can only be called from within the same library (:)"
+        errorLine1="      FulfillmentRequest.newBuilder().addFulfillments("
+        errorLine2="                                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentRequest.newBuilder can only be called from within the same library (:)"
+        errorLine1="      FulfillmentRequest.newBuilder().addFulfillments("
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIdentifier can only be called from within the same library (:)"
+        errorLine1="        fulfillment.toBuilder().setIdentifier(capabilityIdentifier).build()"
+        errorLine2="                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllFulfillmentValues can only be called from within the same library (:)"
+        errorLine1="      FulfillmentParam.newBuilder().setName(slotName).addAllFulfillmentValues("
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="      FulfillmentParam.newBuilder().setName(slotName).addAllFulfillmentValues("
+        errorLine2="                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentParam.newBuilder can only be called from within the same library (:)"
+        errorLine1="      FulfillmentParam.newBuilder().setName(slotName).addAllFulfillmentValues("
+        errorLine2="                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library (:)"
+        errorLine1="        paramValues.map { FulfillmentValue.newBuilder().setValue(it).build() }"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentValue.newBuilder can only be called from within the same library (:)"
+        errorLine1="        paramValues.map { FulfillmentValue.newBuilder().setValue(it).build() }"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addFulfillments can only be called from within the same library (:)"
+        errorLine1="      FulfillmentRequest.newBuilder().addFulfillments("
+        errorLine2="                                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentRequest.newBuilder can only be called from within the same library (:)"
+        errorLine1="      FulfillmentRequest.newBuilder().addFulfillments("
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.newBuilder can only be called from within the same library (:)"
+        errorLine1="        Fulfillment.newBuilder()"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library (:)"
+        errorLine1="          .setName(actionSpec.capabilityName)"
+        errorLine2="           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllParams can only be called from within the same library (:)"
+        errorLine1="          .addAllParams(fulfillmentParams)"
+        errorLine2="           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/capabilities/testing/CapabilityTestUtils.kt"/>
+    </issue>
+
+</issues>
diff --git a/appactions/interaction/interaction-proto/build.gradle b/appactions/interaction/interaction-proto/build.gradle
index b34ff5c..72da50c 100644
--- a/appactions/interaction/interaction-proto/build.gradle
+++ b/appactions/interaction/interaction-proto/build.gradle
@@ -92,8 +92,8 @@
         }
     }
     lintOptions {
-        // protobuf generates unannotated and synthetic accessor methods
-        disable("UnknownNullness", "SyntheticAccessor")
+        // protobuf generates unannotated methods
+        disable("UnknownNullness")
     }
 }
 
diff --git a/appactions/interaction/interaction-service-proto/build.gradle b/appactions/interaction/interaction-service-proto/build.gradle
index 9e627e8..b2ab25e 100644
--- a/appactions/interaction/interaction-service-proto/build.gradle
+++ b/appactions/interaction/interaction-service-proto/build.gradle
@@ -88,8 +88,8 @@
 afterEvaluate {
     lint {
         lintOptions {
-            // protobuf generates unannotated and synthetic accessor methods
-            disable("UnknownNullness", "SyntheticAccessor")
+            // protobuf generates unannotated methods
+            disable("UnknownNullness")
             abortOnError(false)
             checkReleaseBuilds(false)
         }
diff --git a/appactions/interaction/interaction-service/lint-baseline.xml b/appactions/interaction/interaction-service/lint-baseline.xml
new file mode 100644
index 0000000..e3a7e0c
--- /dev/null
+++ b/appactions/interaction/interaction-service/lint-baseline.xml
@@ -0,0 +1,1327 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionMetadata.parseFrom can only be called from within the same library (:)"
+        errorLine1="                    AppInteractionMetadata.parseFrom(serialized)"
+        errorLine2="                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.UNKNOWN_ERROR_STATUS can only be accessed from within the same library (:)"
+        errorLine1="            -> ErrorStatus.UNKNOWN_ERROR_STATUS"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.INTERNAL can only be accessed from within the same library (:)"
+        errorLine1="            ErrorStatusInternal.INTERNAL -> ErrorStatus.INTERNAL"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.CANCELED can only be accessed from within the same library (:)"
+        errorLine1="            ErrorStatusInternal.CANCELED -> ErrorStatus.CANCELED"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.TIMEOUT can only be accessed from within the same library (:)"
+        errorLine1="            ErrorStatusInternal.TIMEOUT -> ErrorStatus.TIMEOUT"
+        errorLine2="                                                       ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.INVALID_REQUEST can only be accessed from within the same library (:)"
+        errorLine1="            ErrorStatusInternal.INVALID_REQUEST -> ErrorStatus.INVALID_REQUEST"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.SESSION_NOT_FOUND can only be accessed from within the same library (:)"
+        errorLine1="            -> ErrorStatus.SESSION_NOT_FOUND"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.EXTERNAL_EXCEPTION can only be accessed from within the same library (:)"
+        errorLine1="            ErrorStatusInternal.EXTERNAL_EXCEPTION -> ErrorStatus.EXTERNAL_EXCEPTION"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionMetadata.newBuilder can only be called from within the same library (:)"
+        errorLine1="        return AppInteractionMetadata.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setErrorStatus can only be called from within the same library (:)"
+        errorLine1="            .setErrorStatus(errorStatus)"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionMetadata.newBuilder can only be called from within the same library (:)"
+        errorLine1="            AppInteractionMetadata.newBuilder()"
+        errorLine2="                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setErrorStatus can only be called from within the same library (:)"
+        errorLine1="                .setErrorStatus(errorStatus)"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionGrpcMetadata.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionServiceGrpc.SERVICE_NAME can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .servicePolicy(AppInteractionServiceGrpc.SERVICE_NAME, securityPolicy)"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionServiceImplBase can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1=") : AppInteractionServiceImplBase() {"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionServiceImplBase.startUpSession can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="    override fun startUpSession("
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            val sessionId = request.sessionIdentifier!!"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            val sessionId = request.sessionIdentifier!!"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                registeredCapabilities.firstOrNull { request.identifier == it.id }"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                registeredCapabilities.firstOrNull { request.identifier == it.id }"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.CAPABILITY_NOT_FOUND can only be accessed from within the same library (:)"
+        errorLine1="                        AppInteractionGrpcMetadata.metadataOf(ErrorStatus.CAPABILITY_NOT_FOUND)"
+        errorLine2="                                                                          ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HostProperties.getHostViewHeightDp can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewHeightDp,"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HostProperties.getHostViewHeightDp can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewHeightDp,"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getHostProperties can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewHeightDp,"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getHostProperties can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewHeightDp,"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HostProperties.getHostViewWidthDp can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewWidthDp,"
+        errorLine2="                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HostProperties.getHostViewWidthDp can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewWidthDp,"
+        errorLine2="                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getHostProperties can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewWidthDp,"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionRequest.getHostProperties can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        request.hostProperties.hostViewWidthDp,"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StartSessionResponse.getDefaultInstance can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            startSessionResponseObserver.onNext(StartSessionResponse.getDefaultInstance())"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionServiceImplBase.sendRequestFulfillment can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="    override fun sendRequestFulfillment("
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentRequest.getFulfillmentsList can only be called from within the same library (:)"
+        errorLine1="        if (request.fulfillmentRequest.fulfillmentsList.isEmpty()) {"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentRequest.getFulfillmentsList can only be called from within the same library (:)"
+        errorLine1="        if (request.fulfillmentRequest.fulfillmentsList.isEmpty()) {"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getFulfillmentRequest can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        if (request.fulfillmentRequest.fulfillmentsList.isEmpty()) {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getFulfillmentRequest can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        if (request.fulfillmentRequest.fulfillmentsList.isEmpty()) {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.INVALID_REQUEST can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.INVALID_REQUEST)"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FulfillmentRequest.getFulfillments can only be called from within the same library (:)"
+        errorLine1="        val selectedFulfillment = request.fulfillmentRequest.getFulfillments(0)"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getFulfillmentRequest can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val selectedFulfillment = request.fulfillmentRequest.getFulfillments(0)"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getFulfillmentRequest can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val selectedFulfillment = request.fulfillmentRequest.getFulfillments(0)"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getIdentifier can only be called from within the same library (:)"
+        errorLine1="            registeredCapabilities.firstOrNull { selectedFulfillment.identifier == it.id }"
+        errorLine2="                                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fulfillment.getIdentifier can only be called from within the same library (:)"
+        errorLine1="            registeredCapabilities.firstOrNull { selectedFulfillment.identifier == it.id }"
+        errorLine2="                                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.CAPABILITY_NOT_FOUND can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.CAPABILITY_NOT_FOUND)"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val sessionId = request.sessionIdentifier!!"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val sessionId = request.sessionIdentifier!!"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.SESSION_NOT_FOUND can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.SESSION_NOT_FOUND)"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.SESSION_NOT_FOUND can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.SESSION_NOT_FOUND)"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUiUpdate can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        responseBuilder.uiUpdate = UiUpdate.getDefaultInstance()"
+        errorLine2="                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUiUpdate can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        responseBuilder.uiUpdate = UiUpdate.getDefaultInstance()"
+        errorLine2="                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UiUpdate.getDefaultInstance can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        responseBuilder.uiUpdate = UiUpdate.getDefaultInstance()"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UiUpdate.getDefaultInstance can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        responseBuilder.uiUpdate = UiUpdate.getDefaultInstance()"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCollectionUpdate can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                            responseBuilder.setCollectionUpdate("
+        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionUpdate.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                                AppInteractionServiceProto.CollectionUpdate.newBuilder()"
+        errorLine2="                                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllViewIds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                                    .addAllViewIds("
+        errorLine2="                                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.UNKNOWN_ERROR_STATUS can only be accessed from within the same library (:)"
+        errorLine1="                                    ErrorStatus.UNKNOWN_ERROR_STATUS)"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionServiceImplBase.requestUi can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="    override fun requestUi("
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UiRequest.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val sessionId = req.sessionIdentifier!!"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UiRequest.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val sessionId = req.sessionIdentifier!!"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.SESSION_NOT_FOUND can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.SESSION_NOT_FOUND)"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.NO_UI_ELEMENTS can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.NO_UI_ELEMENTS)),"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.NO_UI_ELEMENTS can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.NO_UI_ELEMENTS)),"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UiResponse.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val uiResponseBuilder = AppInteractionServiceProto.UiResponse.newBuilder()"
+        errorLine2="                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTileLayout can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        tileLayoutInternal?.let { uiResponseBuilder.tileLayout = it.toProto() }"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTileLayout can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        tileLayoutInternal?.let { uiResponseBuilder.tileLayout = it.toProto() }"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRemoteViewsInfo can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setRemoteViewsInfo("
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RemoteViewsInfo.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    RemoteViewsInfo.newBuilder()"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidthDp can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        .setWidthDp(remoteViewsInternal.size.width)"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeightDp can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        .setHeightDp(remoteViewsInternal.size.height)"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionServiceImplBase.requestCollection can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="    override fun requestCollection("
+        errorLine2="                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val sessionId = req.sessionIdentifier!!"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getSessionIdentifier can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val sessionId = req.sessionIdentifier!!"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.SESSION_NOT_FOUND can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.SESSION_NOT_FOUND)"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.NO_UI_ELEMENTS can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.NO_UI_ELEMENTS)"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getViewId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val factory = uiCache.cachedRemoteViewsInternal?.collectionViewFactories?.get(req.viewId)"
+        errorLine2="                                                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getViewId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        val factory = uiCache.cachedRemoteViewsInternal?.collectionViewFactories?.get(req.viewId)"
+        errorLine2="                                                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.UNKNOWN_ERROR_STATUS can only be accessed from within the same library (:)"
+        errorLine1="                    AppInteractionGrpcMetadata.metadataOf(ErrorStatus.UNKNOWN_ERROR_STATUS),"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getRequestDataCase can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        when (req.requestDataCase) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getRequestDataCase can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        when (req.requestDataCase) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestDataCase.ON_DESTROY can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            RequestDataCase.ON_DESTROY -> {"
+        errorLine2="                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestDataCase.GET_COUNT can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            RequestDataCase.GET_COUNT -> {"
+        errorLine2="                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestDataCase.GET_VIEW_AT can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            RequestDataCase.GET_VIEW_AT -> {"
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getGetViewAt can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getViewAt.position,"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getGetViewAt can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getViewAt.position,"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetViewAt.getPosition can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getViewAt.position,"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetViewAt.getPosition can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getViewAt.position,"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestDataCase.GET_LOADING_VIEW can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            RequestDataCase.GET_LOADING_VIEW -> {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestDataCase.GET_VIEW_TYPE_COUNT can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            RequestDataCase.GET_VIEW_TYPE_COUNT -> {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestDataCase.GET_ITEM_ID can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            RequestDataCase.GET_ITEM_ID -> {"
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getGetItemId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getItemId.position,"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionRequest.getGetItemId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getItemId.position,"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetItemId.getPosition can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getItemId.position,"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetItemId.getPosition can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    req.getItemId.position,"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestDataCase.HAS_STABLE_IDS can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            RequestDataCase.HAS_STABLE_IDS -> {"
+        errorLine2="                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppInteractionServiceImplBase.requestGrounding can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="    override fun requestGrounding("
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="            it.id == request.request.entityProviderId"
+        errorLine2="                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingRequest.getRequest can only be called from within the same library (:)"
+        errorLine1="            it.id == request.request.entityProviderId"
+        errorLine2="                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getEntityProviderId can only be called from within the same library (:)"
+        errorLine1="            it.id == request.request.entityProviderId"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Request.getEntityProviderId can only be called from within the same library (:)"
+        errorLine1="            it.id == request.request.entityProviderId"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GroundingResponse.newBuilder can only be called from within the same library (:)"
+        errorLine1="                GroundingResponse.newBuilder()"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResponse can only be called from within the same library (:)"
+        errorLine1="                    .setResponse("
+        errorLine2="                     ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatus can only be called from within the same library (:)"
+        errorLine1="                        GroundingResponse.Response.newBuilder().setStatus("
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Response.newBuilder can only be called from within the same library (:)"
+        errorLine1="                        GroundingResponse.Response.newBuilder().setStatus("
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.INVALID_ENTITY_PROVIDER can only be accessed from within the same library (:)"
+        errorLine1="                            GroundingResponse.Status.INVALID_ENTITY_PROVIDER,"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.UNKNOWN_ERROR_STATUS can only be accessed from within the same library (:)"
+        errorLine1="                            AppInteractionGrpcMetadata.metadataOf(ErrorStatus.UNKNOWN_ERROR_STATUS)"
+        errorLine2="                                                                              ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionResponse.getDefaultInstance can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        respondAndComplete(CollectionResponse.getDefaultInstance(), observer)"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionResponse.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            CollectionResponse.newBuilder()"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setGetCount can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setGetCount("
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetCount.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    CollectionResponse.GetCount.newBuilder()"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCount can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        .setCount(factory.count),"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionResponse.getDefaultInstance can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        respondAndComplete(CollectionResponse.getDefaultInstance(), observer)"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionResponse.getDefaultInstance can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        respondAndComplete(CollectionResponse.getDefaultInstance(), observer)"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionResponse.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            CollectionResponse.newBuilder()"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setGetViewTypeCount can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setGetViewTypeCount("
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetViewTypeCount.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    CollectionResponse.GetViewTypeCount.newBuilder()"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setViewTypeCount can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        .setViewTypeCount(factory.viewTypeCount),"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionResponse.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            CollectionResponse.newBuilder()"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setGetItemId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setGetItemId("
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetItemId.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    CollectionResponse.GetItemId.newBuilder()"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setItemId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        .setItemId(factory.getItemId(position)),"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CollectionResponse.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            CollectionResponse.newBuilder()"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHasStableIds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setHasStableIds("
+        errorLine2="                 ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HasStableIds.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                    CollectionResponse.HasStableIds.newBuilder()"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHasStableIds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                        .setHasStableIds(factory.hasStableIds()),"
+        errorLine2="                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Version.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val builder = Version.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMajor can only be called from within the same library (:)"
+        errorLine1="            .setMajor(libInfoVersion.major.toLong())"
+        errorLine2="             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMinor can only be called from within the same library (:)"
+        errorLine1="            .setMinor(libInfoVersion.minor.toLong())"
+        errorLine2="             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPatch can only be called from within the same library (:)"
+        errorLine1="            .setPatch(libInfoVersion.patch.toLong())"
+        errorLine2="             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPrereleaseId can only be called from within the same library (:)"
+        errorLine1="        libInfoVersion.preReleaseId?.let(builder::setPrereleaseId)"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getTaskInfo can only be called from within the same library (:)"
+        errorLine1="        val isDialogSession = appAction.taskInfo.supportsPartialFulfillment"
+        errorLine2="                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppAction.getTaskInfo can only be called from within the same library (:)"
+        errorLine1="        val isDialogSession = appAction.taskInfo.supportsPartialFulfillment"
+        errorLine2="                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskInfo.getSupportsPartialFulfillment can only be called from within the same library (:)"
+        errorLine1="        val isDialogSession = appAction.taskInfo.supportsPartialFulfillment"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskInfo.getSupportsPartialFulfillment can only be called from within the same library (:)"
+        errorLine1="        val isDialogSession = appAction.taskInfo.supportsPartialFulfillment"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AppActionsContext.newBuilder can only be called from within the same library (:)"
+        errorLine1="        val appActionsContextBuilder = AppActionsContext.newBuilder()"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addActions can only be called from within the same library (:)"
+        errorLine1="            .addActions(appAction)"
+        errorLine2="             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVersion can only be called from within the same library (:)"
+        errorLine1="            .setVersion(version)"
+        errorLine2="             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addDialogStates can only be called from within the same library (:)"
+        errorLine1="        currentSession.state?.let(appActionsContextBuilder::addDialogStates)"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Response.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            Response.newBuilder()"
+        errorLine2="                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFulfillmentResponse can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setFulfillmentResponse(fulfillmentResponse)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAppActionsContext can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setAppActionsContext(appActionsContextBuilder.build())"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndingStatus can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            responseBuilder.endingStatus = AppInteractionServiceProto.Status.newBuilder()"
+        errorLine2="                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndingStatus can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            responseBuilder.endingStatus = AppInteractionServiceProto.Status.newBuilder()"
+        errorLine2="                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            responseBuilder.endingStatus = AppInteractionServiceProto.Status.newBuilder()"
+        errorLine2="                                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Status.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            responseBuilder.endingStatus = AppInteractionServiceProto.Status.newBuilder()"
+        errorLine2="                                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatusCode can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setStatusCode(Code.COMPLETE)"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStatusCode can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setStatusCode(Code.COMPLETE)"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Code.COMPLETE can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setStatusCode(Code.COMPLETE)"
+        errorLine2="                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Code.COMPLETE can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="                .setStatusCode(Code.COMPLETE)"
+        errorLine2="                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TileLayout.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="        return AppInteractionServiceProto.TileLayout.newBuilder()"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLayout can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.appactions.interaction`)"
+        errorLine1="            .setLayout(ByteString.copyFrom(byteArray))"
+        errorLine2="             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt"/>
+    </issue>
+
+</issues>
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 64b1c0e..3533744 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -276,7 +276,6 @@
                     }
 
                     @Override
-                    @SuppressLint("SyntheticAccessor")
                     public boolean onForwardingStarted() {
                         if (!getInternalPopup().isShowing()) {
                             showPopup();
diff --git a/appcompat/buildSrc b/appcompat/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/appcompat/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
index 9ea1892..408b409 100644
--- a/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
+++ b/appcompat/integration-tests/receive-content-testapp/src/main/java/androidx/appcompat/demo/receivecontent/MainActivity.java
@@ -16,7 +16,6 @@
 
 package androidx.appcompat.demo.receivecontent;
 
-import android.annotation.SuppressLint;
 import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
@@ -89,7 +88,6 @@
             return null;
         });
         Futures.addCallback(deleteAllFuture, new FutureCallback<Void>() {
-            @SuppressLint("SyntheticAccessor")
             @Override
             public void onSuccess(@Nullable Void result) {
                 mAttachmentsRecyclerViewAdapter.clearAttachments();
diff --git a/appcompat/settings.gradle b/appcompat/settings.gradle
index 6b23d6f..76d1e9a 100644
--- a/appcompat/settings.gradle
+++ b/appcompat/settings.gradle
@@ -1,6 +1,6 @@
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverterTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverterTest.java
index 92a87de..e67ab5f 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverterTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverterTest.java
@@ -29,6 +29,8 @@
 
 import org.junit.Test;
 
+import java.util.Arrays;
+
 public class SchemaToProtoConverterTest {
     @Test
     public void testGetProto_Email() {
@@ -206,7 +208,7 @@
                         "Organization")
                         .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
                         .setShouldIndexNestedProperties(false)
-                        .addIndexableNestedProperties("orgName", "notes")
+                        .addIndexableNestedProperties(Arrays.asList("orgName", "notes"))
                         .build())
                 .build();
 
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverter.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverter.java
index 41cd770..b5f0b97 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverter.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SchemaToProtoConverter.java
@@ -219,11 +219,8 @@
                         .setCardinality(proto.getCardinality().getNumber())
                         .setShouldIndexNestedProperties(
                                 proto.getDocumentIndexingConfig().getIndexNestedProperties());
-        List<String> indexableNestedPropertiesList =
-                proto.getDocumentIndexingConfig().getIndexableNestedPropertiesListList();
-        for (int i = 0; i < indexableNestedPropertiesList.size(); i++) {
-            builder.addIndexableNestedProperties(indexableNestedPropertiesList.get(i));
-        }
+        builder.addIndexableNestedProperties(
+                proto.getDocumentIndexingConfig().getIndexableNestedPropertiesListList());
         return builder.build();
     }
 
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
index 5dc334e..af87d4d 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
@@ -331,6 +331,50 @@
         }
     }
 
+    @Document
+    static class LongDoc {
+        @Document.Namespace
+        String mNamespace;
+
+        @Document.Id
+        String mId;
+
+        @Document.CreationTimestampMillis
+        Long mCreationTimestampMillis;
+
+        @Document.Score
+        Integer mScore;
+
+        @Document.TtlMillis
+        private Long mTtlMillis;
+
+        public Long getTtlMillis() {
+            return mTtlMillis;
+        }
+
+        public void setTtlMillis(Long ttlMillis) {
+            mTtlMillis = ttlMillis;
+        }
+
+        @Document.StringProperty(indexingType = INDEXING_TYPE_PREFIXES)
+        String mString;
+
+        @Override
+        public boolean equals(Object other) {
+            if (this == other) {
+                return true;
+            }
+            if (!(other instanceof LongDoc)) {
+                return false;
+            }
+            LongDoc otherDoc = (LongDoc) other;
+            assertThat(otherDoc.mId).isEqualTo(this.mId);
+            assertThat(otherDoc.mNamespace).isEqualTo(this.mNamespace);
+            assertThat(otherDoc.mString).isEqualTo(this.mString);
+            return true;
+        }
+    }
+
     @Test
     public void testAnnotationProcessor() throws Exception {
         //TODO(b/156296904) add test for int, float, GenericDocument, and class with
@@ -469,6 +513,32 @@
     }
 
     @Test
+    public void testAnnotation_unsetNumberClasses() throws Exception {
+        // Test for a few kinds of non-primitive Document special properties. This shouldn't
+        // cause a NPE.
+        mSession.setSchemaAsync(new SetSchemaRequest.Builder()
+                        .addDocumentClasses(LongDoc.class)
+                        .build())
+                .get();
+
+        LongDoc doc = new LongDoc();
+        doc.mId = "id";
+        doc.mNamespace = "ns";
+        // Don't set any special fields
+
+        checkIsBatchResultSuccess(mSession.putAsync(
+                new PutDocumentsRequest.Builder().addDocuments(doc).build()));
+        SearchResults searchResults = mSession.search("", new SearchSpec.Builder()
+                .build());
+        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
+        assertThat(documents).hasSize(1);
+
+        // Convert GenericDocument to Gift and check values.
+        LongDoc outputDocument = documents.get(0).toDocumentClass(LongDoc.class);
+        assertThat(outputDocument).isEqualTo(doc);
+    }
+
+    @Test
     public void testGenericDocumentConversion() throws Exception {
         Gift inGift = Gift.createPopulatedGift();
         GenericDocument genericDocument1 = GenericDocument.fromDocumentClass(inGift);
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSchemaInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSchemaInternalTest.java
index 58be2eb..686c44f 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSchemaInternalTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSchemaInternalTest.java
@@ -18,8 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.junit.Assert.assertThrows;
-
 import androidx.appsearch.testutil.AppSearchEmail;
 
 import org.junit.Test;
@@ -268,29 +266,4 @@
                                 .getJoinableValueType())
                 .isEqualTo(AppSearchSchema.StringPropertyConfig.JOINABLE_VALUE_TYPE_QUALIFIED_ID);
     }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testInvalidDocumentPropertyConfig_indexableNestedProperties() {
-        // Adding indexableNestedProperties with shouldIndexNestedProperties=true should fail.
-        AppSearchSchema.DocumentPropertyConfig.Builder builder =
-                new AppSearchSchema.DocumentPropertyConfig.Builder("prop1", "Schema1")
-                        .setShouldIndexNestedProperties(true)
-                        .addIndexableNestedProperties("prop1");
-        IllegalArgumentException e =
-                assertThrows(IllegalArgumentException.class, () -> builder.build());
-        assertThat(e)
-                .hasMessageThat()
-                .contains(
-                        "DocumentIndexingConfig#shouldIndexNestedProperties is required to be false"
-                            + " when one or more indexableNestedProperties are provided.");
-
-        builder.addIndexableNestedPropertyPaths(new PropertyPath("prop1.prop2"));
-        e = assertThrows(IllegalArgumentException.class, () -> builder.build());
-        assertThat(e)
-                .hasMessageThat()
-                .contains(
-                        "DocumentIndexingConfig#shouldIndexNestedProperties is required to be false"
-                            + " when one or more indexableNestedProperties are provided.");
-    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java
index 87f4f43..c2022c1 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java
@@ -16,10 +16,8 @@
 
 package androidx.appsearch.app;
 
-import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_ARGUMENT;
 import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
 import static androidx.appsearch.testutil.AppSearchTestUtils.convertSearchResultsToDocuments;
-import static androidx.appsearch.testutil.AppSearchTestUtils.doGet;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -30,7 +28,6 @@
 import androidx.annotation.NonNull;
 import androidx.appsearch.app.AppSearchSchema.PropertyConfig;
 import androidx.appsearch.app.AppSearchSchema.StringPropertyConfig;
-import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.testutil.AppSearchEmail;
 
 import com.google.common.collect.ImmutableList;
@@ -42,7 +39,6 @@
 
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 
 public abstract class AppSearchSessionInternalTestBase {
@@ -280,1168 +276,6 @@
 
     // TODO(b/291122592): move to CTS once the APIs it uses are public
     @Test
-    public void testGetSchema_parentTypes() throws Exception {
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-        AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email").build();
-        AppSearchSchema messageSchema = new AppSearchSchema.Builder("Message").build();
-        AppSearchSchema emailMessageSchema =
-                new AppSearchSchema.Builder("EmailMessage")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("sender")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("email")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("content")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .addParentType("Email")
-                        .addParentType("Message")
-                        .build();
-
-        SetSchemaRequest request =
-                new SetSchemaRequest.Builder()
-                        .addSchemas(emailMessageSchema)
-                        .addSchemas(emailSchema)
-                        .addSchemas(messageSchema)
-                        .build();
-
-        mDb1.setSchemaAsync(request).get();
-
-        Set<AppSearchSchema> actual = mDb1.getSchemaAsync().get().getSchemas();
-        assertThat(actual).hasSize(3);
-        assertThat(actual).isEqualTo(request.getSchemas());
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testGetSchema_parentTypes_notSupported() throws Exception {
-        assumeFalse(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-        AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email").build();
-        AppSearchSchema messageSchema = new AppSearchSchema.Builder("Message").build();
-        AppSearchSchema emailMessageSchema =
-                new AppSearchSchema.Builder("EmailMessage")
-                        .addParentType("Email")
-                        .addParentType("Message")
-                        .build();
-
-        SetSchemaRequest request =
-                new SetSchemaRequest.Builder()
-                        .addSchemas(emailMessageSchema)
-                        .addSchemas(emailSchema)
-                        .addSchemas(messageSchema)
-                        .build();
-
-        UnsupportedOperationException e =
-                assertThrows(
-                        UnsupportedOperationException.class,
-                        () -> mDb1.setSchemaAsync(request).get());
-        assertThat(e)
-                .hasMessageThat()
-                .contains(
-                        Features.SCHEMA_ADD_PARENT_TYPE
-                                + " is not available on this AppSearch implementation.");
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_dataTypeIncompatibleWithParentTypes() throws Exception {
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-        AppSearchSchema messageSchema =
-                new AppSearchSchema.Builder("Message")
-                        .addProperty(
-                                new AppSearchSchema.LongPropertyConfig.Builder("sender")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .build();
-        AppSearchSchema emailSchema =
-                new AppSearchSchema.Builder("Email")
-                        .addParentType("Message")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("sender")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .build();
-
-        SetSchemaRequest request =
-                new SetSchemaRequest.Builder()
-                        .addSchemas(messageSchema)
-                        .addSchemas(emailSchema)
-                        .build();
-
-        ExecutionException executionException =
-                assertThrows(ExecutionException.class, () -> mDb1.setSchemaAsync(request).get());
-        assertThat(executionException).hasCauseThat().isInstanceOf(AppSearchException.class);
-        AppSearchException exception = (AppSearchException) executionException.getCause();
-        assertThat(exception.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
-        assertThat(exception)
-                .hasMessageThat()
-                .containsMatch(
-                        "Property sender from child type .*\\$/Email is not compatible"
-                                + " to the parent type .*\\$/Message.");
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_documentTypeIncompatibleWithParentTypes() throws Exception {
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-        AppSearchSchema personSchema = new AppSearchSchema.Builder("Person").build();
-        AppSearchSchema artistSchema =
-                new AppSearchSchema.Builder("Artist").addParentType("Person").build();
-        AppSearchSchema messageSchema =
-                new AppSearchSchema.Builder("Message")
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "sender", "Artist")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .build();
-        AppSearchSchema emailSchema =
-                new AppSearchSchema.Builder("Email")
-                        .addParentType("Message")
-                        // "sender" is defined as an Artist in the parent type Message, which
-                        // requires "sender"'s type here to be a subtype of Artist. Thus, this is
-                        // incompatible because Person is not a subtype of Artist.
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "sender", "Person")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .build();
-
-        SetSchemaRequest request =
-                new SetSchemaRequest.Builder()
-                        .addSchemas(personSchema)
-                        .addSchemas(artistSchema)
-                        .addSchemas(messageSchema)
-                        .addSchemas(emailSchema)
-                        .build();
-
-        ExecutionException executionException =
-                assertThrows(ExecutionException.class, () -> mDb1.setSchemaAsync(request).get());
-        assertThat(executionException).hasCauseThat().isInstanceOf(AppSearchException.class);
-        AppSearchException exception = (AppSearchException) executionException.getCause();
-        assertThat(exception.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
-        assertThat(exception)
-                .hasMessageThat()
-                .containsMatch(
-                        "Property sender from child type .*\\$/Email is not compatible"
-                                + " to the parent type .*\\$/Message.");
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_compatibleWithParentTypes() throws Exception {
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-        AppSearchSchema personSchema = new AppSearchSchema.Builder("Person").build();
-        AppSearchSchema artistSchema =
-                new AppSearchSchema.Builder("Artist").addParentType("Person").build();
-        AppSearchSchema messageSchema =
-                new AppSearchSchema.Builder("Message")
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "sender", "Person")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("note")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .build();
-        AppSearchSchema emailSchema =
-                new AppSearchSchema.Builder("Email")
-                        .addParentType("Message")
-                        .addProperty(
-                                // Artist is a subtype of Person, so compatible
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "sender", "Artist")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("note")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        // A different indexing or tokenizer type is ok.
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(
-                                                StringPropertyConfig.TOKENIZER_TYPE_VERBATIM)
-                                        .build())
-                        .build();
-
-        SetSchemaRequest request =
-                new SetSchemaRequest.Builder()
-                        .addSchemas(personSchema)
-                        .addSchemas(artistSchema)
-                        .addSchemas(messageSchema)
-                        .addSchemas(emailSchema)
-                        .build();
-
-        mDb1.setSchemaAsync(request).get();
-
-        Set<AppSearchSchema> actual = mDb1.getSchemaAsync().get().getSchemas();
-        assertThat(actual).hasSize(4);
-        assertThat(actual).isEqualTo(request.getSchemas());
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testQuery_typeFilterWithPolymorphism() throws Exception {
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-
-        // Schema registration
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .build();
-        AppSearchSchema artistSchema =
-                new AppSearchSchema.Builder("Artist")
-                        .addParentType("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .build();
-        mDb1.setSchemaAsync(
-                        new SetSchemaRequest.Builder()
-                                .addSchemas(personSchema)
-                                .addSchemas(artistSchema)
-                                .addSchemas(AppSearchEmail.SCHEMA)
-                                .build())
-                .get();
-
-        // Index some documents
-        GenericDocument personDoc =
-                new GenericDocument.Builder<>("namespace", "id1", "Person")
-                        .setPropertyString("name", "Foo")
-                        .build();
-        GenericDocument artistDoc =
-                new GenericDocument.Builder<>("namespace", "id2", "Artist")
-                        .setPropertyString("name", "Foo")
-                        .build();
-        AppSearchEmail emailDoc =
-                new AppSearchEmail.Builder("namespace", "id3")
-                        .setFrom("[email protected]")
-                        .setTo("[email protected]", "[email protected]")
-                        .setSubject("testPut example")
-                        .setBody("Foo")
-                        .build();
-        checkIsBatchResultSuccess(
-                mDb1.putAsync(
-                        new PutDocumentsRequest.Builder()
-                                .addGenericDocuments(personDoc, artistDoc, emailDoc)
-                                .build()));
-
-        // Query for the documents
-        SearchResults searchResults =
-                mDb1.search(
-                        "Foo",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
-        assertThat(documents).hasSize(3);
-        assertThat(documents).containsExactly(personDoc, artistDoc, emailDoc);
-
-        // Query with a filter for the "Person" type should also include the "Artist" type.
-        searchResults =
-                mDb1.search(
-                        "Foo",
-                        new SearchSpec.Builder()
-                                .addFilterSchemas("Person")
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        documents = convertSearchResultsToDocuments(searchResults);
-        assertThat(documents).hasSize(2);
-        assertThat(documents).containsExactly(personDoc, artistDoc);
-
-        // Query with a filters for the "Artist" type should not include the "Person" type.
-        searchResults =
-                mDb1.search(
-                        "Foo",
-                        new SearchSpec.Builder()
-                                .addFilterSchemas("Artist")
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        documents = convertSearchResultsToDocuments(searchResults);
-        assertThat(documents).hasSize(1);
-        assertThat(documents).containsExactly(artistDoc);
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testQuery_projectionWithPolymorphism() throws Exception {
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-
-        // Schema registration
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("emailAddress")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .build();
-        AppSearchSchema artistSchema =
-                new AppSearchSchema.Builder("Artist")
-                        .addParentType("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("emailAddress")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("company")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .build();
-        mDb1.setSchemaAsync(
-                        new SetSchemaRequest.Builder()
-                                .addSchemas(personSchema)
-                                .addSchemas(artistSchema)
-                                .build())
-                .get();
-
-        // Index two documents
-        GenericDocument personDoc =
-                new GenericDocument.Builder<>("namespace", "id1", "Person")
-                        .setCreationTimestampMillis(1000)
-                        .setPropertyString("name", "Foo Person")
-                        .setPropertyString("emailAddress", "[email protected]")
-                        .build();
-        GenericDocument artistDoc =
-                new GenericDocument.Builder<>("namespace", "id2", "Artist")
-                        .setCreationTimestampMillis(1000)
-                        .setPropertyString("name", "Foo Artist")
-                        .setPropertyString("emailAddress", "[email protected]")
-                        .setPropertyString("company", "Company")
-                        .build();
-        checkIsBatchResultSuccess(
-                mDb1.putAsync(
-                        new PutDocumentsRequest.Builder()
-                                .addGenericDocuments(personDoc, artistDoc)
-                                .build()));
-
-        // Query with type property paths {"Person", ["name"]}, {"Artist", ["emailAddress"]}
-        // This will be expanded to paths {"Person", ["name"]}, {"Artist", ["name", "emailAddress"]}
-        // via polymorphism.
-        SearchResults searchResults =
-                mDb1.search(
-                        "Foo",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .addProjection("Person", ImmutableList.of("name"))
-                                .addProjection("Artist", ImmutableList.of("emailAddress"))
-                                .build());
-        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
-
-        // The person document should have been returned with only the "name" property. The artist
-        // document should have been returned with all of its properties.
-        GenericDocument expectedPerson =
-                new GenericDocument.Builder<>("namespace", "id1", "Person")
-                        .setCreationTimestampMillis(1000)
-                        .setPropertyString("name", "Foo Person")
-                        .build();
-        GenericDocument expectedArtist =
-                new GenericDocument.Builder<>("namespace", "id2", "Artist")
-                        .setCreationTimestampMillis(1000)
-                        .setPropertyString("name", "Foo Artist")
-                        .setPropertyString("emailAddress", "[email protected]")
-                        .build();
-        assertThat(documents).containsExactly(expectedPerson, expectedArtist);
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testQuery_indexBasedOnParentTypePolymorphism() throws Exception {
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
-
-        // Schema registration
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .build();
-        AppSearchSchema artistSchema =
-                new AppSearchSchema.Builder("Artist")
-                        .addParentType("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("company")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .build())
-                        .build();
-        AppSearchSchema messageSchema =
-                new AppSearchSchema.Builder("Message")
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "sender", "Person")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setShouldIndexNestedProperties(true)
-                                        .build())
-                        .build();
-        mDb1.setSchemaAsync(
-                        new SetSchemaRequest.Builder()
-                                .addSchemas(personSchema)
-                                .addSchemas(artistSchema)
-                                .addSchemas(messageSchema)
-                                .build())
-                .get();
-
-        // Index some an artistDoc and a messageDoc
-        GenericDocument artistDoc =
-                new GenericDocument.Builder<>("namespace", "id1", "Artist")
-                        .setPropertyString("name", "Foo")
-                        .setPropertyString("company", "Bar")
-                        .build();
-        GenericDocument messageDoc =
-                new GenericDocument.Builder<>("namespace", "id2", "Message")
-                        // sender is defined as a Person, which accepts an Artist because Artist <:
-                        // Person.
-                        // However, indexing will be based on what's defined in Person, so the
-                        // "company"
-                        // property in artistDoc cannot be used to search this messageDoc.
-                        .setPropertyDocument("sender", artistDoc)
-                        .build();
-        checkIsBatchResultSuccess(
-                mDb1.putAsync(
-                        new PutDocumentsRequest.Builder()
-                                .addGenericDocuments(artistDoc, messageDoc)
-                                .build()));
-
-        // Query for the documents
-        SearchResults searchResults =
-                mDb1.search(
-                        "Foo",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
-        assertThat(documents).hasSize(2);
-        assertThat(documents).containsExactly(artistDoc, messageDoc);
-
-        // The "company" property in artistDoc cannot be used to search messageDoc.
-        searchResults =
-                mDb1.search(
-                        "Bar",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        documents = convertSearchResultsToDocuments(searchResults);
-        assertThat(documents).hasSize(1);
-        assertThat(documents).containsExactly(artistDoc);
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_indexableNestedPropsList() throws Exception {
-        assumeTrue(
-                mDb1.getFeatures()
-                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
-
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "worksFor", "Organization")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setShouldIndexNestedProperties(false)
-                                        .addIndexableNestedProperties("name")
-                                        .build())
-                        .build();
-        AppSearchSchema organizationSchema =
-                new AppSearchSchema.Builder("Organization")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("notes")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .build();
-
-        mDb1.setSchemaAsync(
-                        new SetSchemaRequest.Builder()
-                                .addSchemas(personSchema, organizationSchema)
-                                .build())
-                .get();
-
-        // Test that properties in Person's indexable_nested_properties_list are indexed and
-        // searchable
-        GenericDocument org1 =
-                new GenericDocument.Builder<>("namespace", "org1", "Organization")
-                        .setPropertyString("name", "Org1")
-                        .setPropertyString("notes", "Some notes")
-                        .build();
-        GenericDocument person1 =
-                new GenericDocument.Builder<>("namespace", "person1", "Person")
-                        .setPropertyString("name", "Jane")
-                        .setPropertyDocument("worksFor", org1)
-                        .build();
-
-        AppSearchBatchResult<String, Void> putResult =
-                checkIsBatchResultSuccess(
-                        mDb1.putAsync(
-                                new PutDocumentsRequest.Builder()
-                                        .addGenericDocuments(person1, org1)
-                                        .build()));
-        assertThat(putResult.getSuccesses()).containsExactly("person1", null, "org1", null);
-        assertThat(putResult.getFailures()).isEmpty();
-
-        GetByDocumentIdRequest getByDocumentIdRequest =
-                new GetByDocumentIdRequest.Builder("namespace").addIds("person1", "org1").build();
-        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(person1, org1);
-
-        // Both org1 and person should be returned for query "Org1"
-        // For org1 this matches the 'name' property and for person1 this matches the
-        // 'worksFor.name' property.
-        SearchResults searchResults =
-                mDb1.search(
-                        "Org1",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(person1, org1);
-
-        // Only org1 should be returned for query "notes", since 'worksFor.notes' is not indexed
-        // for the Person-type.
-        searchResults =
-                mDb1.search(
-                        "notes",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(1);
-        assertThat(outDocuments).containsExactly(org1);
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_indexableNestedPropsList_notSupported() throws Exception {
-        assumeFalse(
-                mDb1.getFeatures()
-                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
-
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "worksFor", "Organization")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setShouldIndexNestedProperties(false)
-                                        .addIndexableNestedProperties("name")
-                                        .build())
-                        .build();
-        AppSearchSchema organizationSchema =
-                new AppSearchSchema.Builder("Organization")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("notes")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .build();
-
-        SetSchemaRequest setSchemaRequest =
-                new SetSchemaRequest.Builder().addSchemas(personSchema, organizationSchema).build();
-        UnsupportedOperationException e =
-                assertThrows(
-                        UnsupportedOperationException.class,
-                        () -> mDb1.setSchemaAsync(setSchemaRequest).get());
-        assertThat(e)
-                .hasMessageThat()
-                .contains(
-                        "DocumentPropertyConfig.addIndexableNestedProperties is not supported on"
-                            + " this AppSearch implementation.");
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_indexableNestedPropsList_nonIndexableProp() throws Exception {
-        assumeTrue(
-                mDb1.getFeatures()
-                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
-
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "worksFor", "Organization")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setShouldIndexNestedProperties(false)
-                                        .addIndexableNestedProperties("name")
-                                        .build())
-                        .build();
-        AppSearchSchema organizationSchema =
-                new AppSearchSchema.Builder("Organization")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("notes")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_NONE)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_NONE)
-                                        .build())
-                        .build();
-
-        mDb1.setSchemaAsync(
-                        new SetSchemaRequest.Builder()
-                                .addSchemas(personSchema, organizationSchema)
-                                .build())
-                .get();
-
-        // Test that Person's nested properties are indexed correctly.
-        GenericDocument org1 =
-                new GenericDocument.Builder<>("namespace", "org1", "Organization")
-                        .setPropertyString("name", "Org1")
-                        .setPropertyString("notes", "Some notes")
-                        .build();
-        GenericDocument person1 =
-                new GenericDocument.Builder<>("namespace", "person1", "Person")
-                        .setPropertyString("name", "Jane")
-                        .setPropertyDocument("worksFor", org1)
-                        .build();
-
-        AppSearchBatchResult<String, Void> putResult =
-                checkIsBatchResultSuccess(
-                        mDb1.putAsync(
-                                new PutDocumentsRequest.Builder()
-                                        .addGenericDocuments(person1, org1)
-                                        .build()));
-        assertThat(putResult.getSuccesses()).containsExactly("person1", null, "org1", null);
-        assertThat(putResult.getFailures()).isEmpty();
-
-        GetByDocumentIdRequest getByDocumentIdRequest =
-                new GetByDocumentIdRequest.Builder("namespace").addIds("person1", "org1").build();
-        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(person1, org1);
-
-        // Both org1 and person should be returned for query "Org1"
-        // For org1 this matches the 'name' property and for person1 this matches the
-        // 'worksFor.name' property.
-        SearchResults searchResults =
-                mDb1.search(
-                        "Org1",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(person1, org1);
-
-        // No documents should match for "notes", since both 'Organization:notes'
-        // and 'Person:worksFor.notes' are non-indexable.
-        searchResults =
-                mDb1.search(
-                        "notes",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(0);
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_indexableNestedPropsList_multipleNestedLevels() throws Exception {
-        assumeTrue(
-                mDb1.getFeatures()
-                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
-
-        AppSearchSchema emailSchema =
-                new AppSearchSchema.Builder("Email")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("subject")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "sender", "Person")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
-                                        .setShouldIndexNestedProperties(false)
-                                        .addIndexableNestedProperties(
-                                                "name", "worksFor.name", "worksFor.notes")
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "recipient", "Person")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
-                                        .setShouldIndexNestedProperties(true)
-                                        .build())
-                        .build();
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("age")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "worksFor", "Organization")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setShouldIndexNestedProperties(false)
-                                        .addIndexableNestedProperties("name", "id")
-                                        .build())
-                        .build();
-        AppSearchSchema organizationSchema =
-                new AppSearchSchema.Builder("Organization")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("notes")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("id")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .build();
-
-        mDb1.setSchemaAsync(
-                        new SetSchemaRequest.Builder()
-                                .addSchemas(emailSchema, personSchema, organizationSchema)
-                                .build())
-                .get();
-
-        // Test that Email and Person's nested properties are indexed correctly.
-        GenericDocument org1 =
-                new GenericDocument.Builder<>("namespace", "org1", "Organization")
-                        .setPropertyString("name", "Org1")
-                        .setPropertyString("notes", "Some notes")
-                        .setPropertyString("id", "1234")
-                        .build();
-        GenericDocument person1 =
-                new GenericDocument.Builder<>("namespace", "person1", "Person")
-                        .setPropertyString("name", "Jane")
-                        .setPropertyString("age", "20")
-                        .setPropertyDocument("worksFor", org1)
-                        .build();
-        GenericDocument person2 =
-                new GenericDocument.Builder<>("namespace", "person2", "Person")
-                        .setPropertyString("name", "John")
-                        .setPropertyString("age", "30")
-                        .setPropertyDocument("worksFor", org1)
-                        .build();
-        GenericDocument email1 =
-                new GenericDocument.Builder<>("namespace", "email1", "Email")
-                        .setPropertyString("subject", "Greetings!")
-                        .setPropertyDocument("sender", person1)
-                        .setPropertyDocument("recipient", person2)
-                        .build();
-        AppSearchBatchResult<String, Void> putResult =
-                checkIsBatchResultSuccess(
-                        mDb1.putAsync(
-                                new PutDocumentsRequest.Builder()
-                                        .addGenericDocuments(person1, org1, person2, email1)
-                                        .build()));
-        assertThat(putResult.getSuccesses())
-                .containsExactly("person1", null, "org1", null, "person2", null, "email1", null);
-        assertThat(putResult.getFailures()).isEmpty();
-
-        GetByDocumentIdRequest getByDocumentIdRequest =
-                new GetByDocumentIdRequest.Builder("namespace")
-                        .addIds("person1", "org1", "person2", "email1")
-                        .build();
-        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
-        assertThat(outDocuments).hasSize(4);
-        assertThat(outDocuments).containsExactly(person1, org1, person2, email1);
-
-        // Indexed properties:
-        // Email: 'subject', 'sender.name', 'sender.worksFor.name', 'sender.worksFor.notes',
-        //        'recipient.name', 'recipient.age', 'recipient.worksFor.name',
-        //        'recipient.worksFor.id'
-        //        (Email:recipient sets index_nested_props=true, so it follows the same indexing
-        //         configs as the next schema-type level (person))
-        // Person: 'name', 'age', 'worksFor.name', 'worksFor.id'
-        // Organization: 'name', 'notes', 'id'
-        //
-        // All documents should be returned for query 'Org1' because all schemaTypes index the
-        // 'Organization:name' property.
-        SearchResults searchResults =
-                mDb1.search(
-                        "Org1",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(4);
-        assertThat(outDocuments).containsExactly(person1, org1, person2, email1);
-
-        // org1 and email1 should be returned for query 'notes'
-        searchResults =
-                mDb1.search(
-                        "notes",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(org1, email1);
-
-        // all docs should be returned for query "1234"
-        searchResults =
-                mDb1.search(
-                        "1234",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(4);
-        assertThat(outDocuments).containsExactly(person1, org1, person2, email1);
-
-        // email1 should be returned for query "30", but not for "20" since sender.age is not
-        // indexed, but recipient.age is.
-        // For query "30", person2 should also be returned
-        // For query "20, person1 should be returned.
-        searchResults =
-                mDb1.search(
-                        "30",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(person2, email1);
-
-        searchResults =
-                mDb1.search(
-                        "20",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(1);
-        assertThat(outDocuments).containsExactly(person1);
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
-    public void testSetSchema_indexableNestedPropsList_circularRefs() throws Exception {
-        assumeTrue(
-                mDb1.getFeatures()
-                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
-        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SET_SCHEMA_CIRCULAR_REFERENCES));
-
-        // Create schema with valid cycle: Person -> Organization -> Person...
-        AppSearchSchema personSchema =
-                new AppSearchSchema.Builder("Person")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("address")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "worksFor", "Organization")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setShouldIndexNestedProperties(false)
-                                        .addIndexableNestedProperties(
-                                                "name", "notes", "funder.name")
-                                        .build())
-                        .build();
-        AppSearchSchema organizationSchema =
-                new AppSearchSchema.Builder("Organization")
-                        .addProperty(
-                                new StringPropertyConfig.Builder("name")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new StringPropertyConfig.Builder("notes")
-                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
-                                        .setIndexingType(
-                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
-                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
-                                        .build())
-                        .addProperty(
-                                new AppSearchSchema.DocumentPropertyConfig.Builder(
-                                                "funder", "Person")
-                                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
-                                        .setShouldIndexNestedProperties(false)
-                                        .addIndexableNestedProperties(
-                                                "name",
-                                                "worksFor.name",
-                                                "worksFor.funder.address",
-                                                "worksFor.funder.worksFor.notes")
-                                        .build())
-                        .build();
-        mDb1.setSchemaAsync(
-                        new SetSchemaRequest.Builder()
-                                .addSchemas(personSchema, organizationSchema)
-                                .build())
-                .get();
-
-        // Test that documents following the circular schema are indexed correctly, and that its
-        // sections are searchable
-        GenericDocument person1 =
-                new GenericDocument.Builder<>("namespace", "person1", "Person")
-                        .setPropertyString("name", "Person1")
-                        .setPropertyString("address", "someAddress")
-                        .build();
-        GenericDocument org1 =
-                new GenericDocument.Builder<>("namespace", "org1", "Organization")
-                        .setPropertyString("name", "Org1")
-                        .setPropertyString("notes", "someNote")
-                        .setPropertyDocument("funder", person1)
-                        .build();
-        GenericDocument person2 =
-                new GenericDocument.Builder<>("namespace", "person2", "Person")
-                        .setPropertyString("name", "Person2")
-                        .setPropertyString("address", "anotherAddress")
-                        .setPropertyDocument("worksFor", org1)
-                        .build();
-        GenericDocument org2 =
-                new GenericDocument.Builder<>("namespace", "org2", "Organization")
-                        .setPropertyString("name", "Org2")
-                        .setPropertyString("notes", "anotherNote")
-                        .setPropertyDocument("funder", person2)
-                        .build();
-
-        AppSearchBatchResult<String, Void> putResult =
-                checkIsBatchResultSuccess(
-                        mDb1.putAsync(
-                                new PutDocumentsRequest.Builder()
-                                        .addGenericDocuments(person1, org1, person2, org2)
-                                        .build()));
-        assertThat(putResult.getSuccesses())
-                .containsExactly("person1", null, "org1", null, "person2", null, "org2", null);
-        assertThat(putResult.getFailures()).isEmpty();
-
-        GetByDocumentIdRequest getByDocumentIdRequest =
-                new GetByDocumentIdRequest.Builder("namespace")
-                        .addIds("person1", "person2", "org1", "org2")
-                        .build();
-        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
-        assertThat(outDocuments).hasSize(4);
-        assertThat(outDocuments).containsExactly(person1, person2, org1, org2);
-
-        // Indexed properties:
-        // Person: 'name', 'address', 'worksFor.name', 'worksFor.notes', 'worksFor.funder.name'
-        // Organization: 'name', 'notes', 'funder.name', 'funder.worksFor.name',
-        //               'funder.worksFor.funder.address', 'funder.worksFor.funder.worksFor.notes'
-        //
-        // "Person1" should match person1 (name), org1 (funder.name) and person2
-        // (worksFor.funder.name)
-        SearchResults searchResults =
-                mDb1.search(
-                        "Person1",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(3);
-        assertThat(outDocuments).containsExactly(person1, org1, person2);
-
-        // "someAddress" should match person1 (address) and org2 (funder.worksFor.funder.address)
-        searchResults =
-                mDb1.search(
-                        "someAddress",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(person1, org2);
-
-        // "Org1" should match org1 (name), person2 (worksFor.name) and org2 (funder.worksFor.name)
-        searchResults =
-                mDb1.search(
-                        "Org1",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(3);
-        assertThat(outDocuments).containsExactly(org1, person2, org2);
-
-        // "someNote" should match org1 (notes) and person2 (worksFor.notes)
-        searchResults =
-                mDb1.search(
-                        "someNote",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(org1, person2);
-
-        // "Person2" should match person2 (name), org2 (funder.name)
-        searchResults =
-                mDb1.search(
-                        "Person2",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(2);
-        assertThat(outDocuments).containsExactly(person2, org2);
-
-        // "anotherAddress" should match only person2 (address)
-        searchResults =
-                mDb1.search(
-                        "anotherAddress",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(1);
-        assertThat(outDocuments).containsExactly(person2);
-
-        // "Org2" and "anotherNote" should both match only org2 (name, notes)
-        searchResults =
-                mDb1.search(
-                        "Org2",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(1);
-        assertThat(outDocuments).containsExactly(org2);
-
-        searchResults =
-                mDb1.search(
-                        "anotherNote",
-                        new SearchSpec.Builder()
-                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
-                                .build());
-        outDocuments = convertSearchResultsToDocuments(searchResults);
-        assertThat(outDocuments).hasSize(1);
-        assertThat(outDocuments).containsExactly(org2);
-    }
-
-    // TODO(b/291122592): move to CTS once the APIs it uses are public
-    @Test
     public void testQuery_ResultGroupingLimits_SchemaGroupingSupported() throws Exception {
         assumeTrue(
                 mDb1.getFeatures()
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
index 4d5b6c6..8197731 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
@@ -18,11 +18,15 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assert.assertThrows;
+
 import android.os.Bundle;
 import android.os.Parcel;
 
 import org.junit.Test;
 
+import java.util.Arrays;
+
 /** Tests for private APIs of {@link GenericDocument}. */
 public class GenericDocumentInternalTest {
     @Test
@@ -62,4 +66,48 @@
         assertThat(outDoc.getPropertyDocument("propDocument").getPropertyBytesArray("propBytes"))
                 .isEqualTo(new byte[][]{{3, 4}});
     }
+
+    @Test
+    public void testPropertyParcel_onePropertySet_success() {
+        String[] stringValues = {"a", "b"};
+        long[] longValues = {1L, 2L};
+        double[] doubleValues = {1.0, 2.0};
+        boolean[] booleanValues = {true, false};
+        byte[][] bytesValues = {new byte[1]};
+        Bundle[] bundleValues = {new Bundle()};
+
+        assertThat(new PropertyParcel.Builder("name").setStringValues(
+                stringValues).build().getStringValues()).isEqualTo(
+                Arrays.copyOf(stringValues, stringValues.length));
+        assertThat(new PropertyParcel.Builder("name").setLongValues(
+                longValues).build().getLongValues()).isEqualTo(
+                Arrays.copyOf(longValues, longValues.length));
+        assertThat(new PropertyParcel.Builder("name").setDoubleValues(
+                doubleValues).build().getDoubleValues()).isEqualTo(
+                Arrays.copyOf(doubleValues, doubleValues.length));
+        assertThat(new PropertyParcel.Builder("name").setBooleanValues(
+                booleanValues).build().getBooleanValues()).isEqualTo(
+                Arrays.copyOf(booleanValues, booleanValues.length));
+        assertThat(new PropertyParcel.Builder("name").setBytesValues(
+                bytesValues).build().getBytesValues()).isEqualTo(
+                Arrays.copyOf(bytesValues, bytesValues.length));
+        assertThat(new PropertyParcel.Builder("name").setDocumentValues(
+                bundleValues).build().getDocumentValues()).isEqualTo(
+                Arrays.copyOf(bundleValues, bundleValues.length));
+    }
+
+    @Test
+    public void testPropertyParcel_moreThanOnePropertySet_exceptionThrown() {
+        String[] stringValues = {"a", "b"};
+        long[] longValues = {1L, 2L};
+        PropertyParcel.Builder propertyParcelBuilder =
+                new PropertyParcel.Builder("name")
+                        .setStringValues(stringValues)
+                        .setLongValues(longValues);
+
+        IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
+                () -> propertyParcelBuilder.build());
+
+        assertThat(exception.getMessage()).contains("One and only one type array");
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaCtsTest.java
index 8939aa2..84661ff 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaCtsTest.java
@@ -29,6 +29,8 @@
 
 import org.junit.Test;
 
+import java.util.Collections;
+
 public class AppSearchSchemaCtsTest {
     @Test
     public void testInvalidEnums() {
@@ -438,4 +440,28 @@
         assertThrows(IllegalArgumentException.class, () ->
                 new LongPropertyConfig.Builder("timestamp").setIndexingType(-1).build());
     }
+
+    @Test
+    public void testInvalidDocumentPropertyConfig_indexableNestedProperties() {
+        // Adding indexableNestedProperties with shouldIndexNestedProperties=true should fail.
+        AppSearchSchema.DocumentPropertyConfig.Builder builder =
+                new AppSearchSchema.DocumentPropertyConfig.Builder("prop1", "Schema1")
+                        .setShouldIndexNestedProperties(true)
+                        .addIndexableNestedProperties(Collections.singleton("prop1"));
+        IllegalArgumentException e =
+                assertThrows(IllegalArgumentException.class, () -> builder.build());
+        assertThat(e)
+                .hasMessageThat()
+                .contains(
+                        "DocumentIndexingConfig#shouldIndexNestedProperties is required to be false"
+                                + " when one or more indexableNestedProperties are provided.");
+
+        builder.addIndexableNestedProperties(Collections.singleton("prop1.prop2"));
+        e = assertThrows(IllegalArgumentException.class, () -> builder.build());
+        assertThat(e)
+                .hasMessageThat()
+                .contains(
+                        "DocumentIndexingConfig#shouldIndexNestedProperties is required to be false"
+                                + " when one or more indexableNestedProperties are provided.");
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index 63075d4..7bde81f 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -5553,4 +5553,1155 @@
                 new SearchSuggestionResult.Builder().setSuggestedResult("bar subject:foo").build();
         assertThat(suggestions).containsExactly(barSubjectFo, barSubjectFoo);
     }
+
+    @Test
+    public void testGetSchema_parentTypes() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+        AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email").build();
+        AppSearchSchema messageSchema = new AppSearchSchema.Builder("Message").build();
+        AppSearchSchema emailMessageSchema =
+                new AppSearchSchema.Builder("EmailMessage")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("sender")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("email")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("content")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .addParentType("Email")
+                        .addParentType("Message")
+                        .build();
+
+        SetSchemaRequest request =
+                new SetSchemaRequest.Builder()
+                        .addSchemas(emailMessageSchema)
+                        .addSchemas(emailSchema)
+                        .addSchemas(messageSchema)
+                        .build();
+
+        mDb1.setSchemaAsync(request).get();
+
+        Set<AppSearchSchema> actual = mDb1.getSchemaAsync().get().getSchemas();
+        assertThat(actual).hasSize(3);
+        assertThat(actual).isEqualTo(request.getSchemas());
+    }
+
+    @Test
+    public void testGetSchema_parentTypes_notSupported() throws Exception {
+        assumeFalse(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+        AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email").build();
+        AppSearchSchema messageSchema = new AppSearchSchema.Builder("Message").build();
+        AppSearchSchema emailMessageSchema =
+                new AppSearchSchema.Builder("EmailMessage")
+                        .addParentType("Email")
+                        .addParentType("Message")
+                        .build();
+
+        SetSchemaRequest request =
+                new SetSchemaRequest.Builder()
+                        .addSchemas(emailMessageSchema)
+                        .addSchemas(emailSchema)
+                        .addSchemas(messageSchema)
+                        .build();
+
+        UnsupportedOperationException e =
+                assertThrows(
+                        UnsupportedOperationException.class,
+                        () -> mDb1.setSchemaAsync(request).get());
+        assertThat(e)
+                .hasMessageThat()
+                .contains(
+                        Features.SCHEMA_ADD_PARENT_TYPE
+                                + " is not available on this AppSearch implementation.");
+    }
+
+    @Test
+    public void testSetSchema_dataTypeIncompatibleWithParentTypes() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+        AppSearchSchema messageSchema =
+                new AppSearchSchema.Builder("Message")
+                        .addProperty(
+                                new AppSearchSchema.LongPropertyConfig.Builder("sender")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .build();
+        AppSearchSchema emailSchema =
+                new AppSearchSchema.Builder("Email")
+                        .addParentType("Message")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("sender")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .build();
+
+        SetSchemaRequest request =
+                new SetSchemaRequest.Builder()
+                        .addSchemas(messageSchema)
+                        .addSchemas(emailSchema)
+                        .build();
+
+        ExecutionException executionException =
+                assertThrows(ExecutionException.class, () -> mDb1.setSchemaAsync(request).get());
+        assertThat(executionException).hasCauseThat().isInstanceOf(AppSearchException.class);
+        AppSearchException exception = (AppSearchException) executionException.getCause();
+        assertThat(exception.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
+        assertThat(exception)
+                .hasMessageThat()
+                .containsMatch(
+                        "Property sender from child type .*\\$/Email is not compatible"
+                                + " to the parent type .*\\$/Message.");
+    }
+
+    @Test
+    public void testSetSchema_documentTypeIncompatibleWithParentTypes() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+        AppSearchSchema personSchema = new AppSearchSchema.Builder("Person").build();
+        AppSearchSchema artistSchema =
+                new AppSearchSchema.Builder("Artist").addParentType("Person").build();
+        AppSearchSchema messageSchema =
+                new AppSearchSchema.Builder("Message")
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "sender", "Artist")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .build();
+        AppSearchSchema emailSchema =
+                new AppSearchSchema.Builder("Email")
+                        .addParentType("Message")
+                        // "sender" is defined as an Artist in the parent type Message, which
+                        // requires "sender"'s type here to be a subtype of Artist. Thus, this is
+                        // incompatible because Person is not a subtype of Artist.
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "sender", "Person")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .build();
+
+        SetSchemaRequest request =
+                new SetSchemaRequest.Builder()
+                        .addSchemas(personSchema)
+                        .addSchemas(artistSchema)
+                        .addSchemas(messageSchema)
+                        .addSchemas(emailSchema)
+                        .build();
+
+        ExecutionException executionException =
+                assertThrows(ExecutionException.class, () -> mDb1.setSchemaAsync(request).get());
+        assertThat(executionException).hasCauseThat().isInstanceOf(AppSearchException.class);
+        AppSearchException exception = (AppSearchException) executionException.getCause();
+        assertThat(exception.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
+        assertThat(exception)
+                .hasMessageThat()
+                .containsMatch(
+                        "Property sender from child type .*\\$/Email is not compatible"
+                                + " to the parent type .*\\$/Message.");
+    }
+
+    @Test
+    public void testSetSchema_compatibleWithParentTypes() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+        AppSearchSchema personSchema = new AppSearchSchema.Builder("Person").build();
+        AppSearchSchema artistSchema =
+                new AppSearchSchema.Builder("Artist").addParentType("Person").build();
+        AppSearchSchema messageSchema =
+                new AppSearchSchema.Builder("Message")
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "sender", "Person")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("note")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .build();
+        AppSearchSchema emailSchema =
+                new AppSearchSchema.Builder("Email")
+                        .addParentType("Message")
+                        .addProperty(
+                                // Artist is a subtype of Person, so compatible
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "sender", "Artist")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("note")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        // A different indexing or tokenizer type is ok.
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(
+                                                StringPropertyConfig.TOKENIZER_TYPE_VERBATIM)
+                                        .build())
+                        .build();
+
+        SetSchemaRequest request =
+                new SetSchemaRequest.Builder()
+                        .addSchemas(personSchema)
+                        .addSchemas(artistSchema)
+                        .addSchemas(messageSchema)
+                        .addSchemas(emailSchema)
+                        .build();
+
+        mDb1.setSchemaAsync(request).get();
+
+        Set<AppSearchSchema> actual = mDb1.getSchemaAsync().get().getSchemas();
+        assertThat(actual).hasSize(4);
+        assertThat(actual).isEqualTo(request.getSchemas());
+    }
+
+    @Test
+    public void testQuery_typeFilterWithPolymorphism() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+
+        // Schema registration
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .build();
+        AppSearchSchema artistSchema =
+                new AppSearchSchema.Builder("Artist")
+                        .addParentType("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .build();
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(personSchema)
+                                .addSchemas(artistSchema)
+                                .addSchemas(AppSearchEmail.SCHEMA)
+                                .build())
+                .get();
+
+        // Index some documents
+        GenericDocument personDoc =
+                new GenericDocument.Builder<>("namespace", "id1", "Person")
+                        .setPropertyString("name", "Foo")
+                        .build();
+        GenericDocument artistDoc =
+                new GenericDocument.Builder<>("namespace", "id2", "Artist")
+                        .setPropertyString("name", "Foo")
+                        .build();
+        AppSearchEmail emailDoc =
+                new AppSearchEmail.Builder("namespace", "id3")
+                        .setFrom("[email protected]")
+                        .setTo("[email protected]", "[email protected]")
+                        .setSubject("testPut example")
+                        .setBody("Foo")
+                        .build();
+        checkIsBatchResultSuccess(
+                mDb1.putAsync(
+                        new PutDocumentsRequest.Builder()
+                                .addGenericDocuments(personDoc, artistDoc, emailDoc)
+                                .build()));
+
+        // Query for the documents
+        SearchResults searchResults =
+                mDb1.search(
+                        "Foo",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
+        assertThat(documents).hasSize(3);
+        assertThat(documents).containsExactly(personDoc, artistDoc, emailDoc);
+
+        // Query with a filter for the "Person" type should also include the "Artist" type.
+        searchResults =
+                mDb1.search(
+                        "Foo",
+                        new SearchSpec.Builder()
+                                .addFilterSchemas("Person")
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        documents = convertSearchResultsToDocuments(searchResults);
+        assertThat(documents).hasSize(2);
+        assertThat(documents).containsExactly(personDoc, artistDoc);
+
+        // Query with a filters for the "Artist" type should not include the "Person" type.
+        searchResults =
+                mDb1.search(
+                        "Foo",
+                        new SearchSpec.Builder()
+                                .addFilterSchemas("Artist")
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        documents = convertSearchResultsToDocuments(searchResults);
+        assertThat(documents).hasSize(1);
+        assertThat(documents).containsExactly(artistDoc);
+    }
+
+    @Test
+    public void testQuery_projectionWithPolymorphism() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+
+        // Schema registration
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("emailAddress")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .build();
+        AppSearchSchema artistSchema =
+                new AppSearchSchema.Builder("Artist")
+                        .addParentType("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("emailAddress")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("company")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .build();
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(personSchema)
+                                .addSchemas(artistSchema)
+                                .build())
+                .get();
+
+        // Index two documents
+        GenericDocument personDoc =
+                new GenericDocument.Builder<>("namespace", "id1", "Person")
+                        .setCreationTimestampMillis(1000)
+                        .setPropertyString("name", "Foo Person")
+                        .setPropertyString("emailAddress", "[email protected]")
+                        .build();
+        GenericDocument artistDoc =
+                new GenericDocument.Builder<>("namespace", "id2", "Artist")
+                        .setCreationTimestampMillis(1000)
+                        .setPropertyString("name", "Foo Artist")
+                        .setPropertyString("emailAddress", "[email protected]")
+                        .setPropertyString("company", "Company")
+                        .build();
+        checkIsBatchResultSuccess(
+                mDb1.putAsync(
+                        new PutDocumentsRequest.Builder()
+                                .addGenericDocuments(personDoc, artistDoc)
+                                .build()));
+
+        // Query with type property paths {"Person", ["name"]}, {"Artist", ["emailAddress"]}
+        // This will be expanded to paths {"Person", ["name"]}, {"Artist", ["name", "emailAddress"]}
+        // via polymorphism.
+        SearchResults searchResults =
+                mDb1.search(
+                        "Foo",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .addProjection("Person", ImmutableList.of("name"))
+                                .addProjection("Artist", ImmutableList.of("emailAddress"))
+                                .build());
+        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
+
+        // The person document should have been returned with only the "name" property. The artist
+        // document should have been returned with all of its properties.
+        GenericDocument expectedPerson =
+                new GenericDocument.Builder<>("namespace", "id1", "Person")
+                        .setCreationTimestampMillis(1000)
+                        .setPropertyString("name", "Foo Person")
+                        .build();
+        GenericDocument expectedArtist =
+                new GenericDocument.Builder<>("namespace", "id2", "Artist")
+                        .setCreationTimestampMillis(1000)
+                        .setPropertyString("name", "Foo Artist")
+                        .setPropertyString("emailAddress", "[email protected]")
+                        .build();
+        assertThat(documents).containsExactly(expectedPerson, expectedArtist);
+    }
+
+    @Test
+    public void testQuery_indexBasedOnParentTypePolymorphism() throws Exception {
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SCHEMA_ADD_PARENT_TYPE));
+
+        // Schema registration
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .build();
+        AppSearchSchema artistSchema =
+                new AppSearchSchema.Builder("Artist")
+                        .addParentType("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("company")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .build())
+                        .build();
+        AppSearchSchema messageSchema =
+                new AppSearchSchema.Builder("Message")
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "sender", "Person")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setShouldIndexNestedProperties(true)
+                                        .build())
+                        .build();
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(personSchema)
+                                .addSchemas(artistSchema)
+                                .addSchemas(messageSchema)
+                                .build())
+                .get();
+
+        // Index some an artistDoc and a messageDoc
+        GenericDocument artistDoc =
+                new GenericDocument.Builder<>("namespace", "id1", "Artist")
+                        .setPropertyString("name", "Foo")
+                        .setPropertyString("company", "Bar")
+                        .build();
+        GenericDocument messageDoc =
+                new GenericDocument.Builder<>("namespace", "id2", "Message")
+                        // sender is defined as a Person, which accepts an Artist because Artist <:
+                        // Person.
+                        // However, indexing will be based on what's defined in Person, so the
+                        // "company"
+                        // property in artistDoc cannot be used to search this messageDoc.
+                        .setPropertyDocument("sender", artistDoc)
+                        .build();
+        checkIsBatchResultSuccess(
+                mDb1.putAsync(
+                        new PutDocumentsRequest.Builder()
+                                .addGenericDocuments(artistDoc, messageDoc)
+                                .build()));
+
+        // Query for the documents
+        SearchResults searchResults =
+                mDb1.search(
+                        "Foo",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
+        assertThat(documents).hasSize(2);
+        assertThat(documents).containsExactly(artistDoc, messageDoc);
+
+        // The "company" property in artistDoc cannot be used to search messageDoc.
+        searchResults =
+                mDb1.search(
+                        "Bar",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        documents = convertSearchResultsToDocuments(searchResults);
+        assertThat(documents).hasSize(1);
+        assertThat(documents).containsExactly(artistDoc);
+    }
+
+    @Test
+    public void testSetSchema_indexableNestedPropsList() throws Exception {
+        assumeTrue(
+                mDb1.getFeatures()
+                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
+
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "worksFor", "Organization")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setShouldIndexNestedProperties(false)
+                                        .addIndexableNestedProperties(Collections.singleton("name"))
+                                        .build())
+                        .build();
+        AppSearchSchema organizationSchema =
+                new AppSearchSchema.Builder("Organization")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("notes")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .build();
+
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(personSchema, organizationSchema)
+                                .build())
+                .get();
+
+        // Test that properties in Person's indexable_nested_properties_list are indexed and
+        // searchable
+        GenericDocument org1 =
+                new GenericDocument.Builder<>("namespace", "org1", "Organization")
+                        .setPropertyString("name", "Org1")
+                        .setPropertyString("notes", "Some notes")
+                        .build();
+        GenericDocument person1 =
+                new GenericDocument.Builder<>("namespace", "person1", "Person")
+                        .setPropertyString("name", "Jane")
+                        .setPropertyDocument("worksFor", org1)
+                        .build();
+
+        AppSearchBatchResult<String, Void> putResult =
+                checkIsBatchResultSuccess(
+                        mDb1.putAsync(
+                                new PutDocumentsRequest.Builder()
+                                        .addGenericDocuments(person1, org1)
+                                        .build()));
+        assertThat(putResult.getSuccesses()).containsExactly("person1", null, "org1", null);
+        assertThat(putResult.getFailures()).isEmpty();
+
+        GetByDocumentIdRequest getByDocumentIdRequest =
+                new GetByDocumentIdRequest.Builder("namespace").addIds("person1", "org1").build();
+        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(person1, org1);
+
+        // Both org1 and person should be returned for query "Org1"
+        // For org1 this matches the 'name' property and for person1 this matches the
+        // 'worksFor.name' property.
+        SearchResults searchResults =
+                mDb1.search(
+                        "Org1",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(person1, org1);
+
+        // Only org1 should be returned for query "notes", since 'worksFor.notes' is not indexed
+        // for the Person-type.
+        searchResults =
+                mDb1.search(
+                        "notes",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(1);
+        assertThat(outDocuments).containsExactly(org1);
+    }
+
+    @Test
+    public void testSetSchema_indexableNestedPropsList_notSupported() throws Exception {
+        assumeFalse(
+                mDb1.getFeatures()
+                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
+
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "worksFor", "Organization")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setShouldIndexNestedProperties(false)
+                                        .addIndexableNestedProperties(Collections.singleton("name"))
+                                        .build())
+                        .build();
+        AppSearchSchema organizationSchema =
+                new AppSearchSchema.Builder("Organization")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("notes")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .build();
+
+        SetSchemaRequest setSchemaRequest =
+                new SetSchemaRequest.Builder().addSchemas(personSchema, organizationSchema).build();
+        UnsupportedOperationException e =
+                assertThrows(
+                        UnsupportedOperationException.class,
+                        () -> mDb1.setSchemaAsync(setSchemaRequest).get());
+        assertThat(e)
+                .hasMessageThat()
+                .contains(
+                        "DocumentPropertyConfig.addIndexableNestedProperties is not supported on"
+                                + " this AppSearch implementation.");
+    }
+
+    @Test
+    public void testSetSchema_indexableNestedPropsList_nonIndexableProp() throws Exception {
+        assumeTrue(
+                mDb1.getFeatures()
+                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
+
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "worksFor", "Organization")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setShouldIndexNestedProperties(false)
+                                        .addIndexableNestedProperties(Collections.singleton("name"))
+                                        .build())
+                        .build();
+        AppSearchSchema organizationSchema =
+                new AppSearchSchema.Builder("Organization")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("notes")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(StringPropertyConfig.INDEXING_TYPE_NONE)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_NONE)
+                                        .build())
+                        .build();
+
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(personSchema, organizationSchema)
+                                .build())
+                .get();
+
+        // Test that Person's nested properties are indexed correctly.
+        GenericDocument org1 =
+                new GenericDocument.Builder<>("namespace", "org1", "Organization")
+                        .setPropertyString("name", "Org1")
+                        .setPropertyString("notes", "Some notes")
+                        .build();
+        GenericDocument person1 =
+                new GenericDocument.Builder<>("namespace", "person1", "Person")
+                        .setPropertyString("name", "Jane")
+                        .setPropertyDocument("worksFor", org1)
+                        .build();
+
+        AppSearchBatchResult<String, Void> putResult =
+                checkIsBatchResultSuccess(
+                        mDb1.putAsync(
+                                new PutDocumentsRequest.Builder()
+                                        .addGenericDocuments(person1, org1)
+                                        .build()));
+        assertThat(putResult.getSuccesses()).containsExactly("person1", null, "org1", null);
+        assertThat(putResult.getFailures()).isEmpty();
+
+        GetByDocumentIdRequest getByDocumentIdRequest =
+                new GetByDocumentIdRequest.Builder("namespace").addIds("person1", "org1").build();
+        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(person1, org1);
+
+        // Both org1 and person should be returned for query "Org1"
+        // For org1 this matches the 'name' property and for person1 this matches the
+        // 'worksFor.name' property.
+        SearchResults searchResults =
+                mDb1.search(
+                        "Org1",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(person1, org1);
+
+        // No documents should match for "notes", since both 'Organization:notes'
+        // and 'Person:worksFor.notes' are non-indexable.
+        searchResults =
+                mDb1.search(
+                        "notes",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(0);
+    }
+
+    @Test
+    public void testSetSchema_indexableNestedPropsList_multipleNestedLevels() throws Exception {
+        assumeTrue(
+                mDb1.getFeatures()
+                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
+
+        AppSearchSchema emailSchema =
+                new AppSearchSchema.Builder("Email")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("subject")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "sender", "Person")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                                        .setShouldIndexNestedProperties(false)
+                                        .addIndexableNestedProperties(
+                                                Arrays.asList(
+                                                        "name", "worksFor.name", "worksFor.notes"))
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "recipient", "Person")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                                        .setShouldIndexNestedProperties(true)
+                                        .build())
+                        .build();
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("age")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "worksFor", "Organization")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setShouldIndexNestedProperties(false)
+                                        .addIndexableNestedProperties(Arrays.asList("name", "id"))
+                                        .build())
+                        .build();
+        AppSearchSchema organizationSchema =
+                new AppSearchSchema.Builder("Organization")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REQUIRED)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("notes")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("id")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .build();
+
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(emailSchema, personSchema, organizationSchema)
+                                .build())
+                .get();
+
+        // Test that Email and Person's nested properties are indexed correctly.
+        GenericDocument org1 =
+                new GenericDocument.Builder<>("namespace", "org1", "Organization")
+                        .setPropertyString("name", "Org1")
+                        .setPropertyString("notes", "Some notes")
+                        .setPropertyString("id", "1234")
+                        .build();
+        GenericDocument person1 =
+                new GenericDocument.Builder<>("namespace", "person1", "Person")
+                        .setPropertyString("name", "Jane")
+                        .setPropertyString("age", "20")
+                        .setPropertyDocument("worksFor", org1)
+                        .build();
+        GenericDocument person2 =
+                new GenericDocument.Builder<>("namespace", "person2", "Person")
+                        .setPropertyString("name", "John")
+                        .setPropertyString("age", "30")
+                        .setPropertyDocument("worksFor", org1)
+                        .build();
+        GenericDocument email1 =
+                new GenericDocument.Builder<>("namespace", "email1", "Email")
+                        .setPropertyString("subject", "Greetings!")
+                        .setPropertyDocument("sender", person1)
+                        .setPropertyDocument("recipient", person2)
+                        .build();
+        AppSearchBatchResult<String, Void> putResult =
+                checkIsBatchResultSuccess(
+                        mDb1.putAsync(
+                                new PutDocumentsRequest.Builder()
+                                        .addGenericDocuments(person1, org1, person2, email1)
+                                        .build()));
+        assertThat(putResult.getSuccesses())
+                .containsExactly("person1", null, "org1", null, "person2", null, "email1", null);
+        assertThat(putResult.getFailures()).isEmpty();
+
+        GetByDocumentIdRequest getByDocumentIdRequest =
+                new GetByDocumentIdRequest.Builder("namespace")
+                        .addIds("person1", "org1", "person2", "email1")
+                        .build();
+        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
+        assertThat(outDocuments).hasSize(4);
+        assertThat(outDocuments).containsExactly(person1, org1, person2, email1);
+
+        // Indexed properties:
+        // Email: 'subject', 'sender.name', 'sender.worksFor.name', 'sender.worksFor.notes',
+        //        'recipient.name', 'recipient.age', 'recipient.worksFor.name',
+        //        'recipient.worksFor.id'
+        //        (Email:recipient sets index_nested_props=true, so it follows the same indexing
+        //         configs as the next schema-type level (person))
+        // Person: 'name', 'age', 'worksFor.name', 'worksFor.id'
+        // Organization: 'name', 'notes', 'id'
+        //
+        // All documents should be returned for query 'Org1' because all schemaTypes index the
+        // 'Organization:name' property.
+        SearchResults searchResults =
+                mDb1.search(
+                        "Org1",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(4);
+        assertThat(outDocuments).containsExactly(person1, org1, person2, email1);
+
+        // org1 and email1 should be returned for query 'notes'
+        searchResults =
+                mDb1.search(
+                        "notes",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(org1, email1);
+
+        // all docs should be returned for query "1234"
+        searchResults =
+                mDb1.search(
+                        "1234",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(4);
+        assertThat(outDocuments).containsExactly(person1, org1, person2, email1);
+
+        // email1 should be returned for query "30", but not for "20" since sender.age is not
+        // indexed, but recipient.age is.
+        // For query "30", person2 should also be returned
+        // For query "20, person1 should be returned.
+        searchResults =
+                mDb1.search(
+                        "30",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(person2, email1);
+
+        searchResults =
+                mDb1.search(
+                        "20",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(1);
+        assertThat(outDocuments).containsExactly(person1);
+    }
+
+    @Test
+    public void testSetSchema_indexableNestedPropsList_circularRefs() throws Exception {
+        assumeTrue(
+                mDb1.getFeatures()
+                        .isFeatureSupported(Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES));
+        assumeTrue(mDb1.getFeatures().isFeatureSupported(Features.SET_SCHEMA_CIRCULAR_REFERENCES));
+
+        // Create schema with valid cycle: Person -> Organization -> Person...
+        AppSearchSchema personSchema =
+                new AppSearchSchema.Builder("Person")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("address")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "worksFor", "Organization")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setShouldIndexNestedProperties(false)
+                                        .addIndexableNestedProperties(
+                                                Arrays.asList("name", "notes", "funder.name"))
+                                        .build())
+                        .build();
+        AppSearchSchema organizationSchema =
+                new AppSearchSchema.Builder("Organization")
+                        .addProperty(
+                                new StringPropertyConfig.Builder("name")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new StringPropertyConfig.Builder("notes")
+                                        .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+                                        .setIndexingType(
+                                                StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+                                        .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+                                        .build())
+                        .addProperty(
+                                new AppSearchSchema.DocumentPropertyConfig.Builder(
+                                        "funder", "Person")
+                                        .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+                                        .setShouldIndexNestedProperties(false)
+                                        .addIndexableNestedProperties(
+                                                Arrays.asList(
+                                                        "name",
+                                                        "worksFor.name",
+                                                        "worksFor.funder.address",
+                                                        "worksFor.funder.worksFor.notes"))
+                                        .build())
+                        .build();
+        mDb1.setSchemaAsync(
+                        new SetSchemaRequest.Builder()
+                                .addSchemas(personSchema, organizationSchema)
+                                .build())
+                .get();
+
+        // Test that documents following the circular schema are indexed correctly, and that its
+        // sections are searchable
+        GenericDocument person1 =
+                new GenericDocument.Builder<>("namespace", "person1", "Person")
+                        .setPropertyString("name", "Person1")
+                        .setPropertyString("address", "someAddress")
+                        .build();
+        GenericDocument org1 =
+                new GenericDocument.Builder<>("namespace", "org1", "Organization")
+                        .setPropertyString("name", "Org1")
+                        .setPropertyString("notes", "someNote")
+                        .setPropertyDocument("funder", person1)
+                        .build();
+        GenericDocument person2 =
+                new GenericDocument.Builder<>("namespace", "person2", "Person")
+                        .setPropertyString("name", "Person2")
+                        .setPropertyString("address", "anotherAddress")
+                        .setPropertyDocument("worksFor", org1)
+                        .build();
+        GenericDocument org2 =
+                new GenericDocument.Builder<>("namespace", "org2", "Organization")
+                        .setPropertyString("name", "Org2")
+                        .setPropertyString("notes", "anotherNote")
+                        .setPropertyDocument("funder", person2)
+                        .build();
+
+        AppSearchBatchResult<String, Void> putResult =
+                checkIsBatchResultSuccess(
+                        mDb1.putAsync(
+                                new PutDocumentsRequest.Builder()
+                                        .addGenericDocuments(person1, org1, person2, org2)
+                                        .build()));
+        assertThat(putResult.getSuccesses())
+                .containsExactly("person1", null, "org1", null, "person2", null, "org2", null);
+        assertThat(putResult.getFailures()).isEmpty();
+
+        GetByDocumentIdRequest getByDocumentIdRequest =
+                new GetByDocumentIdRequest.Builder("namespace")
+                        .addIds("person1", "person2", "org1", "org2")
+                        .build();
+        List<GenericDocument> outDocuments = doGet(mDb1, getByDocumentIdRequest);
+        assertThat(outDocuments).hasSize(4);
+        assertThat(outDocuments).containsExactly(person1, person2, org1, org2);
+
+        // Indexed properties:
+        // Person: 'name', 'address', 'worksFor.name', 'worksFor.notes', 'worksFor.funder.name'
+        // Organization: 'name', 'notes', 'funder.name', 'funder.worksFor.name',
+        //               'funder.worksFor.funder.address', 'funder.worksFor.funder.worksFor.notes'
+        //
+        // "Person1" should match person1 (name), org1 (funder.name) and person2
+        // (worksFor.funder.name)
+        SearchResults searchResults =
+                mDb1.search(
+                        "Person1",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(3);
+        assertThat(outDocuments).containsExactly(person1, org1, person2);
+
+        // "someAddress" should match person1 (address) and org2 (funder.worksFor.funder.address)
+        searchResults =
+                mDb1.search(
+                        "someAddress",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(person1, org2);
+
+        // "Org1" should match org1 (name), person2 (worksFor.name) and org2 (funder.worksFor.name)
+        searchResults =
+                mDb1.search(
+                        "Org1",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(3);
+        assertThat(outDocuments).containsExactly(org1, person2, org2);
+
+        // "someNote" should match org1 (notes) and person2 (worksFor.notes)
+        searchResults =
+                mDb1.search(
+                        "someNote",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(org1, person2);
+
+        // "Person2" should match person2 (name), org2 (funder.name)
+        searchResults =
+                mDb1.search(
+                        "Person2",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(2);
+        assertThat(outDocuments).containsExactly(person2, org2);
+
+        // "anotherAddress" should match only person2 (address)
+        searchResults =
+                mDb1.search(
+                        "anotherAddress",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(1);
+        assertThat(outDocuments).containsExactly(person2);
+
+        // "Org2" and "anotherNote" should both match only org2 (name, notes)
+        searchResults =
+                mDb1.search(
+                        "Org2",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(1);
+        assertThat(outDocuments).containsExactly(org2);
+
+        searchResults =
+                mDb1.search(
+                        "anotherNote",
+                        new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+                                .build());
+        outDocuments = convertSearchResultsToDocuments(searchResults);
+        assertThat(outDocuments).hasSize(1);
+        assertThat(outDocuments).containsExactly(org2);
+    }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
index 597924f..81bcd40c 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
@@ -269,11 +269,6 @@
          * of its parents based on the above rules. For example, if LocalBusiness is defined as a
          * subtype of both Place and Organization, then the compatibility of LocalBusiness with
          * Place and the compatibility of LocalBusiness with Organization will both be checked.
-         *
-         * <!--@exportToFramework:ifJetpack()--><!--@exportToFramework:else()
-         * @exportToFramework:hide TODO(b/291122592): Unhide in Mainline when API updates via
-         *   Mainline are possible.
-         * -->
          */
         @CanIgnoreReturnValue
         @NonNull
@@ -1215,7 +1210,7 @@
          * <p>If false, the nested document's properties are not indexed regardless of its own
          * schema.
          *
-         * @see DocumentPropertyConfig.Builder#addIndexableNestedProperties(String...) for
+         * @see DocumentPropertyConfig.Builder#addIndexableNestedProperties(Collection) for
          * indexing a subset of properties from the nested document.
          */
         public boolean shouldIndexNestedProperties() {
@@ -1287,7 +1282,7 @@
              * schema.
              *
              * <p>To index a subset of properties from the nested document, set this to false and
-             * use {@link #addIndexableNestedProperties(String...)}.
+             * use {@link #addIndexableNestedProperties(Collection)}.
              */
             @CanIgnoreReturnValue
             @NonNull
@@ -1298,6 +1293,53 @@
             }
 
             /**
+             * Adds one or more properties for indexing from the nested document property.
+             *
+             * @see #addIndexableNestedProperties(Collection)
+             *
+             * <!--@exportToFramework:ifJetpack()--><!--@exportToFramework:else()
+             * @exportToFramework:hide TODO(b/291122592): Unhide in Mainline when API updates via
+             *   Mainline are possible.
+             * -->
+             */
+            @CanIgnoreReturnValue
+            @NonNull
+            // @exportToFramework:startStrip()
+            @RequiresFeature(
+                    enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+                    name = Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES)
+            // @exportToFramework:endStrip()
+            public DocumentPropertyConfig.Builder addIndexableNestedProperties(
+                    @NonNull String... indexableNestedProperties) {
+                Preconditions.checkNotNull(indexableNestedProperties);
+                return addIndexableNestedProperties(Arrays.asList(indexableNestedProperties));
+            }
+
+            /**
+             * Adds one or more property paths for indexing from the nested document property.
+             *
+             * @see #addIndexableNestedProperties(Collection)
+             *
+             * <!--@exportToFramework:ifJetpack()--><!--@exportToFramework:else()
+             * @exportToFramework:hide TODO(b/291122592): Unhide in Mainline when API updates via
+             *   Mainline are possible.
+             * -->
+             */
+            @CanIgnoreReturnValue
+            @SuppressLint("MissingGetterMatchingBuilder")
+            @NonNull
+            // @exportToFramework:startStrip()
+            @RequiresFeature(
+                    enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+                    name = Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES)
+            // @exportToFramework:endStrip()
+            public DocumentPropertyConfig.Builder addIndexableNestedPropertyPaths(
+                    @NonNull PropertyPath... indexableNestedPropertyPaths) {
+                Preconditions.checkNotNull(indexableNestedPropertyPaths);
+                return addIndexableNestedPropertyPaths(Arrays.asList(indexableNestedPropertyPaths));
+            }
+
+            /**
              * Adds one or more properties for indexing from the nested document. The added property
              * will be indexed according to that property's indexing configurations in the
              * document's schema definition. All properties in this list will consume a sectionId
@@ -1325,58 +1367,6 @@
              * required to be false if any indexable nested property is added this way for the
              * document property. Attempting to build a DocumentPropertyConfig when this is not
              * true throws {@link IllegalArgumentException}.
-             *
-             * <!--@exportToFramework:ifJetpack()--><!--@exportToFramework:else()
-             * @exportToFramework:hide TODO(b/291122592): Unhide in Mainline when API updates via
-             *   Mainline are possible.
-             * -->
-             */
-            @CanIgnoreReturnValue
-            @NonNull
-            // @exportToFramework:startStrip()
-            @RequiresFeature(
-                    enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
-                    name = Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES)
-            // @exportToFramework:endStrip()
-            public DocumentPropertyConfig.Builder addIndexableNestedProperties(
-                    @NonNull String... indexableNestedProperties) {
-                Preconditions.checkNotNull(indexableNestedProperties);
-                return addIndexableNestedProperties(Arrays.asList(indexableNestedProperties));
-            }
-
-            /**
-             * Adds one or more property paths for indexing from the nested document property.
-             *
-             * @see #addIndexableNestedProperties(String...)
-             *
-             * <!--@exportToFramework:ifJetpack()--><!--@exportToFramework:else()
-             * @exportToFramework:hide TODO(b/291122592): Unhide in Mainline when API updates via
-             *   Mainline are possible.
-             * -->
-             */
-            @CanIgnoreReturnValue
-            @SuppressLint("MissingGetterMatchingBuilder")
-            @NonNull
-            // @exportToFramework:startStrip()
-            @RequiresFeature(
-                    enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
-                    name = Features.SCHEMA_ADD_INDEXABLE_NESTED_PROPERTIES)
-            // @exportToFramework:endStrip()
-            public DocumentPropertyConfig.Builder addIndexableNestedPropertyPaths(
-                    @NonNull PropertyPath... indexableNestedPropertyPaths) {
-                Preconditions.checkNotNull(indexableNestedPropertyPaths);
-                return addIndexableNestedPropertyPaths(Arrays.asList(indexableNestedPropertyPaths));
-            }
-
-            /**
-             * Adds one or more properties for indexing from the nested document property.
-             *
-             * @see #addIndexableNestedProperties(String...)
-             *
-             * <!--@exportToFramework:ifJetpack()--><!--@exportToFramework:else()
-             * @exportToFramework:hide TODO(b/291122592): Unhide in Mainline when API updates via
-             *   Mainline are possible.
-             * -->
              */
             @CanIgnoreReturnValue
             @NonNull
@@ -1395,7 +1385,7 @@
             /**
              * Adds one or more property paths for indexing from the nested document property.
              *
-             * @see #addIndexableNestedProperties(String...)
+             * @see #addIndexableNestedProperties(Collection)
              *
              * <!--@exportToFramework:ifJetpack()--><!--@exportToFramework:else()
              * @exportToFramework:hide TODO(b/291122592): Unhide in Mainline when API updates via
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyParcel.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyParcel.java
new file mode 100644
index 0000000..7e6fa88
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyParcel.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+
+import android.os.Bundle;
+import android.os.Parcel;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.safeparcel.AbstractSafeParcelable;
+import androidx.appsearch.safeparcel.SafeParcelable;
+import androidx.appsearch.safeparcel.stub.StubCreators.PropertyParcelCreator;
+import androidx.appsearch.util.BundleUtil;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * A {@link SafeParcelable} to hold the value of a property in {@code GenericDocument#mProperties}.
+ *
+ * <p>This resembles PropertyProto in IcingLib.
+ *
+ * @exportToFramework:hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
[email protected](creator = "PropertyParcelCreator")
+public final class PropertyParcel extends AbstractSafeParcelable {
+    @NonNull public static final PropertyParcelCreator CREATOR = new PropertyParcelCreator();
+
+    @NonNull
+    @Field(id = 1, getter = "getPropertyName")
+    private final String mPropertyName;
+
+    @Nullable
+    @Field(id = 2, getter = "getStringValues")
+    private final String[] mStringValues;
+
+    @Nullable
+    @Field(id = 3, getter = "getLongValues")
+    private final long[] mLongValues;
+
+    @Nullable
+    @Field(id = 4, getter = "getDoubleValues")
+    private final double[] mDoubleValues;
+
+    @Nullable
+    @Field(id = 5, getter = "getBooleanValues")
+    private final boolean[] mBooleanValues;
+
+    @Nullable
+    @Field(id = 6, getter = "getBytesValues")
+    private final byte[][] mBytesValues;
+
+    // TODO(b/24205844) Change it to GenericDocumentParcel once it is added.
+    @Nullable
+    @Field(id = 7, getter = "getDocumentValues")
+    private final Bundle[] mDocumentValues;
+
+    @Nullable private Integer mHashCode;
+
+    @Constructor
+    PropertyParcel(
+            @Param(id = 1) @NonNull String propertyName,
+            @Param(id = 2) @Nullable String[] stringValues,
+            @Param(id = 3) @Nullable long[] longValues,
+            @Param(id = 4) @Nullable double[] doubleValues,
+            @Param(id = 5) @Nullable boolean[] booleanValues,
+            @Param(id = 6) @Nullable byte[][] bytesValues,
+            @Param(id = 7) @Nullable Bundle[] documentValues) {
+        mPropertyName = Objects.requireNonNull(propertyName);
+        mStringValues = stringValues;
+        mLongValues = longValues;
+        mDoubleValues = doubleValues;
+        mBooleanValues = booleanValues;
+        mBytesValues = bytesValues;
+        mDocumentValues = documentValues;
+        checkOnlyOneArrayCanBeSet();
+    }
+
+    /** Returns the name of the property. */
+    @NonNull
+    public String getPropertyName() {
+        return mPropertyName;
+    }
+
+    /** Returns {@code String} values in an array. */
+    @Nullable
+    public String[] getStringValues() {
+        return mStringValues;
+    }
+
+    /** Returns {@code long} values in an array. */
+    @Nullable
+    public long[] getLongValues() {
+        return mLongValues;
+    }
+
+    /** Returns {@code double} values in an array. */
+    @Nullable
+    public double[] getDoubleValues() {
+        return mDoubleValues;
+    }
+
+    /** Returns {@code boolean} values in an array. */
+    @Nullable
+    public boolean[] getBooleanValues() {
+        return mBooleanValues;
+    }
+
+    /** Returns a two-dimension {@code byte} array. */
+    @Nullable
+    public byte[][] getBytesValues() {
+        return mBytesValues;
+    }
+
+    /** Returns {@link Bundle} in an array. */
+    @Nullable
+    public Bundle[] getDocumentValues() {
+        return mDocumentValues;
+    }
+
+    /**
+     * Returns the held values in an array for this property.
+     *
+     * <p>Different from other getter methods, this one will return an {@link Object}.
+     */
+    @Nullable
+    public Object getValues() {
+        if (mStringValues != null) {
+            return mStringValues;
+        }
+        if (mLongValues != null) {
+            return mLongValues;
+        }
+        if (mDoubleValues != null) {
+            return mDoubleValues;
+        }
+        if (mBooleanValues != null) {
+            return mBooleanValues;
+        }
+        if (mBytesValues != null) {
+            return mBytesValues;
+        }
+        if (mDocumentValues != null) {
+            return mDocumentValues;
+        }
+        return null;
+    }
+
+    /**
+     * Checks there is one and only one array can be set for the property.
+     *
+     * @throws IllegalArgumentException if 0, or more than 1 arrays are set.
+     */
+    private void checkOnlyOneArrayCanBeSet() {
+        int notNullCount = 0;
+        if (mStringValues != null) {
+            ++notNullCount;
+        }
+        if (mLongValues != null) {
+            ++notNullCount;
+        }
+        if (mDoubleValues != null) {
+            ++notNullCount;
+        }
+        if (mBooleanValues != null) {
+            ++notNullCount;
+        }
+        if (mBytesValues != null) {
+            ++notNullCount;
+        }
+        if (mDocumentValues != null) {
+            ++notNullCount;
+        }
+        if (notNullCount == 0 || notNullCount > 1) {
+            throw new IllegalArgumentException(
+                    "One and only one type array can be set in PropertyParcel");
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        if (mHashCode == null) {
+            int hashCode = 0;
+            if (mStringValues != null) {
+                hashCode = Arrays.hashCode(mStringValues);
+            } else if (mLongValues != null) {
+                hashCode = Arrays.hashCode(mLongValues);
+            } else if (mDoubleValues != null) {
+                hashCode = Arrays.hashCode(mDoubleValues);
+            } else if (mBooleanValues != null) {
+                hashCode = Arrays.hashCode(mBooleanValues);
+            } else if (mBytesValues != null) {
+                hashCode = Arrays.deepHashCode(mBytesValues);
+            } else if (mDocumentValues != null) {
+                // TODO(b/24205844) change those to Arrays.hashCode() as well once we replace
+                //  this Bundle[] with GenericDocumentParcel[].
+                int[] innerHashCodes = new int[mDocumentValues.length];
+                for (int i = 0; i < mDocumentValues.length; ++i) {
+                    innerHashCodes[i] = BundleUtil.deepHashCode(mDocumentValues[i]);
+                }
+                hashCode = Arrays.hashCode(innerHashCodes);
+            }
+            mHashCode = Objects.hash(mPropertyName, hashCode);
+        }
+        return mHashCode;
+    }
+
+    @Override
+    public boolean equals(@Nullable Object other) {
+        if (this == other) {
+            return true;
+        }
+        if (!(other instanceof PropertyParcel)) {
+            return false;
+        }
+        PropertyParcel otherPropertyParcel = (PropertyParcel) other;
+        if (!mPropertyName.equals(otherPropertyParcel.mPropertyName)) {
+            return false;
+        }
+        return Arrays.equals(mStringValues, otherPropertyParcel.mStringValues)
+                && Arrays.equals(mLongValues, otherPropertyParcel.mLongValues)
+                && Arrays.equals(mDoubleValues, otherPropertyParcel.mDoubleValues)
+                && Arrays.equals(mBooleanValues, otherPropertyParcel.mBooleanValues)
+                && Arrays.deepEquals(mBytesValues, otherPropertyParcel.mBytesValues)
+                // TODO(b/24205844) Change it to Arrays.equals once GenericDocumentParcel is added.
+                && BundleUtil.bundleValueEquals(
+                mDocumentValues, otherPropertyParcel.mDocumentValues);
+    }
+
+    /** Builder for {@link PropertyParcel}. */
+    public static final class Builder {
+        private String mPropertyName;
+        private String[] mStringValues;
+        private long[] mLongValues;
+        private double[] mDoubleValues;
+        private boolean[] mBooleanValues;
+        private byte[][] mBytesValues;
+        private Bundle[] mDocumentValues;
+
+        public Builder(@NonNull String propertyName) {
+            mPropertyName = Objects.requireNonNull(propertyName);
+        }
+
+        /** Sets String values. */
+        @NonNull
+        public Builder setStringValues(@NonNull String[] stringValues) {
+            mStringValues = Objects.requireNonNull(stringValues);
+            return this;
+        }
+
+        /** Sets long values. */
+        @NonNull
+        public Builder setLongValues(@NonNull long[] longValues) {
+            mLongValues = Objects.requireNonNull(longValues);
+            return this;
+        }
+
+        /** Sets double values. */
+        @NonNull
+        public Builder setDoubleValues(@NonNull double[] doubleValues) {
+            mDoubleValues = Objects.requireNonNull(doubleValues);
+            return this;
+        }
+
+        /** Sets boolean values. */
+        @NonNull
+        public Builder setBooleanValues(@NonNull boolean[] booleanValues) {
+            mBooleanValues = Objects.requireNonNull(booleanValues);
+            return this;
+        }
+
+        /** Sets a two dimension byte array. */
+        @NonNull
+        public Builder setBytesValues(@NonNull byte[][] bytesValues) {
+            mBytesValues = Objects.requireNonNull(bytesValues);
+            return this;
+        }
+
+        /** Sets document values. */
+        @NonNull
+        public Builder setDocumentValues(@NonNull Bundle[] documentValues) {
+            mDocumentValues = Objects.requireNonNull(documentValues);
+            return this;
+        }
+
+        /** Builds a {@link PropertyParcel}. */
+        @NonNull
+        public PropertyParcel build() {
+            return new PropertyParcel(
+                    mPropertyName,
+                    mStringValues,
+                    mLongValues,
+                    mDoubleValues,
+                    mBooleanValues,
+                    mBytesValues,
+                    mDocumentValues);
+        }
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        PropertyParcelCreator.writeToParcel(this, dest, flags);
+    }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java b/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
index 8372d5b..63c31df2 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/safeparcel/stub/StubCreators.java
@@ -31,4 +31,8 @@
     /** Stub creator for {@link androidx.appsearch.app.StorageInfo}. */
     public static class StorageInfoCreator extends AbstractCreator {
     }
+
+    /** Stub creator for {@link androidx.appsearch.app.PropertyParcel}. */
+    public static class PropertyParcelCreator extends AbstractCreator {
+    }
 }
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java b/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java
index 573ae7d..9d50086 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/util/BundleUtil.java
@@ -70,7 +70,7 @@
      *
      * <p>Values of type Bundle are compared using {@link #deepEquals}.
      */
-    private static boolean bundleValueEquals(@Nullable Object one, @Nullable Object two) {
+    public static boolean bundleValueEquals(@Nullable Object one, @Nullable Object two) {
         if (one == null && two == null) {
             return true;
         }
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
index c746d9e..2f82106 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
@@ -676,15 +676,15 @@
                 case CREATION_TIMESTAMP_MILLIS:
                     method.addStatement(
                             "builder.setCreationTimestampMillis($L)",
-                            createAppSearchFieldRead(fieldName));
+                            createAppSearchFieldReadNumeric(fieldName));
                     break;
                 case TTL_MILLIS:
                     method.addStatement(
-                            "builder.setTtlMillis($L)", createAppSearchFieldRead(fieldName));
+                            "builder.setTtlMillis($L)", createAppSearchFieldReadNumeric(fieldName));
                     break;
                 case SCORE:
                     method.addStatement(
-                            "builder.setScore($L)", createAppSearchFieldRead(fieldName));
+                            "builder.setScore($L)", createAppSearchFieldReadNumeric(fieldName));
                     break;
             }
         }
@@ -700,4 +700,26 @@
         }
         return null;
     }
+
+    private CodeBlock createAppSearchFieldReadNumeric(@NonNull String fieldName) {
+        CodeBlock fieldRead = createAppSearchFieldRead(fieldName);
+
+        TypeMirror fieldType =
+                IntrospectionHelper.getPropertyType(mModel.getAllElements().get(fieldName));
+
+        String toPrimitiveMethod;
+        Object primitiveFallback;
+        if (fieldType.toString().equals("java.lang.Integer")) {
+            toPrimitiveMethod = "intValue";
+            primitiveFallback = 0;
+        } else if (fieldType.toString().equals("java.lang.Long")) {
+            toPrimitiveMethod = "longValue";
+            primitiveFallback = "0L";
+        } else {
+            return fieldRead;
+        }
+
+        return CodeBlock.of("($L != null) ? $L.$L() : $L",
+                fieldRead, fieldRead, toPrimitiveMethod, primitiveFallback);
+    }
 }
diff --git a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
index 92e552c..503dbcf 100644
--- a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
+++ b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
@@ -517,6 +517,43 @@
     }
 
     @Test
+    public void testClassSpecialValues() throws Exception {
+        Compilation compilation = compile(
+                "@Document\n"
+                        + "public class Gift {\n"
+                        + "    @Document.Namespace\n"
+                        + "    String mNamespace;\n"
+                        + "    @Document.Id\n"
+                        + "    String mId;\n"
+                        + "    @Document.CreationTimestampMillis\n"
+                        + "    Long mCreationTimestampMillis;\n"
+                        + "    @Document.Score\n"
+                        + "    Integer mScore;\n"
+                        + "    @Document.TtlMillis\n"
+                        + "    private Long mTtlMillis;\n"
+                        + "    public Long getTtlMillis() {\n"
+                        + "        return mTtlMillis;\n"
+                        + "    }   \n"
+                        + "    public void setTtlMillis(Long ttlMillis) {\n"
+                        + "        mTtlMillis = ttlMillis;\n"
+                        + "    }   \n"
+                        + "    @Document.StringProperty\n"
+                        + "    String mString;\n"
+                        + "}\n");
+
+        checkResultContains(/*className=*/"Gift.java",
+                /*content=*/"builder.setCreationTimestampMillis((document.mCreationTimestampMillis "
+                        + "!= null) ? document.mCreationTimestampMillis.longValue() : 0L)");
+        checkResultContains(/*className=*/"Gift.java",
+                /*content=*/"builder.setTtlMillis((document.getTtlMillis() != null) ? document"
+                        + ".getTtlMillis().longValue() : 0L)");
+        checkResultContains(/*className=*/"Gift.java",
+                /*content=*/"builder.setScore((document.mScore != null) ? document.mScore.intValue"
+                        + "() : 0)");
+        checkEqualsGolden("Gift.java");
+    }
+
+    @Test
     public void testCantRead_noGetter() {
         Compilation compilation = compile(
                 "@Document\n"
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testClassSpecialValues.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testClassSpecialValues.JAVA
new file mode 100644
index 0000000..292f17b
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testClassSpecialValues.JAVA
@@ -0,0 +1,75 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Class;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+  public static final String SCHEMA_NAME = "Gift";
+
+  @Override
+  public String getSchemaName() {
+    return SCHEMA_NAME;
+  }
+
+  @Override
+  public AppSearchSchema getSchema() throws AppSearchException {
+    return new AppSearchSchema.Builder(SCHEMA_NAME)
+          .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("string")
+            .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+            .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+            .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+            .setJoinableValueType(AppSearchSchema.StringPropertyConfig.JOINABLE_VALUE_TYPE_NONE)
+            .build())
+          .build();
+  }
+
+  @Override
+  public List<Class<?>> getDependencyDocumentClasses() throws AppSearchException {
+    return Collections.emptyList();
+  }
+
+  @Override
+  public GenericDocument toGenericDocument(Gift document) throws AppSearchException {
+    GenericDocument.Builder<?> builder =
+        new GenericDocument.Builder<>(document.mNamespace, document.mId, SCHEMA_NAME);
+    builder.setCreationTimestampMillis((document.mCreationTimestampMillis != null) ? document.mCreationTimestampMillis.longValue() : 0L);
+    builder.setTtlMillis((document.getTtlMillis() != null) ? document.getTtlMillis().longValue() : 0L);
+    builder.setScore((document.mScore != null) ? document.mScore.intValue() : 0);
+    String mStringCopy = document.mString;
+    if (mStringCopy != null) {
+      builder.setPropertyString("string", mStringCopy);
+    }
+    return builder.build();
+  }
+
+  @Override
+  public Gift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+    String mIdConv = genericDoc.getId();
+    String mNamespaceConv = genericDoc.getNamespace();
+    long mCreationTimestampMillisConv = genericDoc.getCreationTimestampMillis();
+    long mTtlMillisConv = genericDoc.getTtlMillis();
+    int mScoreConv = genericDoc.getScore();
+    String[] mStringCopy = genericDoc.getPropertyStringArray("string");
+    String mStringConv = null;
+    if (mStringCopy != null && mStringCopy.length != 0) {
+      mStringConv = mStringCopy[0];
+    }
+    Gift document = new Gift();
+    document.mNamespace = mNamespaceConv;
+    document.mId = mIdConv;
+    document.mCreationTimestampMillis = mCreationTimestampMillisConv;
+    document.mScore = mScoreConv;
+    document.setTtlMillis(mTtlMillisConv);
+    document.mString = mStringConv;
+    return document;
+  }
+}
diff --git a/arch/core/core-testing/src/main/java/androidx/arch/core/executor/TaskExecutorWithFakeMainThread.java b/arch/core/core-testing/src/main/java/androidx/arch/core/executor/TaskExecutorWithFakeMainThread.java
index 184dd7c..06a5ed3 100644
--- a/arch/core/core-testing/src/main/java/androidx/arch/core/executor/TaskExecutorWithFakeMainThread.java
+++ b/arch/core/core-testing/src/main/java/androidx/arch/core/executor/TaskExecutorWithFakeMainThread.java
@@ -16,8 +16,6 @@
 
 package androidx.arch.core.executor;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 
@@ -35,7 +33,6 @@
  *
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@SuppressLint("SyntheticAccessor")
 public class TaskExecutorWithFakeMainThread extends TaskExecutor {
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     List<Throwable> mCaughtExceptions = Collections.synchronizedList(new ArrayList<>());
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/Constants.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/Constants.kt
index 923ba03..a3524b90 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/Constants.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/utils/Constants.kt
@@ -20,7 +20,7 @@
 
 // Minimum AGP version required
 internal val MIN_AGP_VERSION_REQUIRED = AndroidPluginVersion(8, 0, 0).beta(1)
-internal val MAX_AGP_VERSION_REQUIRED = AndroidPluginVersion(8, 2, 0)
+internal val MAX_AGP_VERSION_REQUIRED = AndroidPluginVersion(8, 3, 0)
 
 // Prefix for the build type baseline profile
 internal const val BUILD_TYPE_BASELINE_PROFILE_PREFIX = "nonMinified"
diff --git a/benchmark/benchmark-common/api/1.2.0-beta04.txt b/benchmark/benchmark-common/api/1.2.0-beta04.txt
new file mode 100644
index 0000000..eb18450
--- /dev/null
+++ b/benchmark/benchmark-common/api/1.2.0-beta04.txt
@@ -0,0 +1,117 @@
+// Signature format: 4.0
+package androidx.benchmark {
+
+  public final class BenchmarkState {
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount);
+    method @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.List<java.lang.Double> getMeasurementTimeNs();
+    method public boolean keepRunning();
+    method public void pauseTiming();
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+    method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkConfigApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkStateApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract class MetricCapture {
+    ctor public MetricCapture(java.util.List<java.lang.String> names);
+    method public abstract void capturePaused();
+    method public abstract void captureResumed();
+    method public abstract void captureStart(long timeNs);
+    method public abstract void captureStop(long timeNs, long[] output, int offset);
+    method public final java.util.List<java.lang.String> getNames();
+    property public final java.util.List<java.lang.String> names;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class MicrobenchmarkConfig {
+    ctor public MicrobenchmarkConfig(optional java.util.List<? extends androidx.benchmark.MetricCapture> metrics, optional boolean shouldEnableTraceAppTag, optional boolean shouldEnablePerfettoSdkTracing, optional androidx.benchmark.ProfilerConfig? profiler);
+    method public java.util.List<androidx.benchmark.MetricCapture> getMetrics();
+    method public androidx.benchmark.ProfilerConfig? getProfiler();
+    method public boolean getShouldEnablePerfettoSdkTracing();
+    method public boolean getShouldEnableTraceAppTag();
+    property public final java.util.List<androidx.benchmark.MetricCapture> metrics;
+    property public final androidx.benchmark.ProfilerConfig? profiler;
+    property public final boolean shouldEnablePerfettoSdkTracing;
+    property public final boolean shouldEnableTraceAppTag;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract sealed class ProfilerConfig {
+  }
+
+  public static final class ProfilerConfig.MethodTracing extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.MethodTracing();
+  }
+
+  public static final class ProfilerConfig.StackSampling extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.StackSampling();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class TimeCapture extends androidx.benchmark.MetricCapture {
+    ctor public TimeCapture();
+    method public void capturePaused();
+    method public void captureResumed();
+    method public void captureStart(long timeNs);
+    method public void captureStop(long timeNs, long[] output, int offset);
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoCaptureApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public abstract sealed class PerfettoConfig {
+  }
+
+  public static final class PerfettoConfig.Binary extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Binary(byte[] bytes);
+    method public byte[] getBytes();
+    property public final byte[] bytes;
+  }
+
+  public static final class PerfettoConfig.Text extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Text(String text);
+    method public String getText();
+    property public final String text;
+  }
+
+  @SuppressCompatibility @RequiresApi(23) @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTrace {
+    ctor public PerfettoTrace(String path);
+    method public String getPath();
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final String path;
+    field public static final androidx.benchmark.perfetto.PerfettoTrace.Companion Companion;
+  }
+
+  public static final class PerfettoTrace.Companion {
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+}
+
diff --git a/benchmark/benchmark-common/api/res-1.2.0-beta04.txt b/benchmark/benchmark-common/api/res-1.2.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-common/api/res-1.2.0-beta04.txt
diff --git a/benchmark/benchmark-common/api/restricted_1.2.0-beta04.txt b/benchmark/benchmark-common/api/restricted_1.2.0-beta04.txt
new file mode 100644
index 0000000..fb75b90
--- /dev/null
+++ b/benchmark/benchmark-common/api/restricted_1.2.0-beta04.txt
@@ -0,0 +1,119 @@
+// Signature format: 4.0
+package androidx.benchmark {
+
+  public final class BenchmarkState {
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount);
+    method @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.List<java.lang.Double> getMeasurementTimeNs();
+    method public boolean keepRunning();
+    method @kotlin.PublishedApi internal boolean keepRunningInternal();
+    method public void pauseTiming();
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+    method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion Companion;
+    field @kotlin.PublishedApi internal int iterationsRemaining;
+  }
+
+  public static final class BenchmarkState.Companion {
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkConfigApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkStateApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract class MetricCapture {
+    ctor public MetricCapture(java.util.List<java.lang.String> names);
+    method public abstract void capturePaused();
+    method public abstract void captureResumed();
+    method public abstract void captureStart(long timeNs);
+    method public abstract void captureStop(long timeNs, long[] output, int offset);
+    method public final java.util.List<java.lang.String> getNames();
+    property public final java.util.List<java.lang.String> names;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class MicrobenchmarkConfig {
+    ctor public MicrobenchmarkConfig(optional java.util.List<? extends androidx.benchmark.MetricCapture> metrics, optional boolean shouldEnableTraceAppTag, optional boolean shouldEnablePerfettoSdkTracing, optional androidx.benchmark.ProfilerConfig? profiler);
+    method public java.util.List<androidx.benchmark.MetricCapture> getMetrics();
+    method public androidx.benchmark.ProfilerConfig? getProfiler();
+    method public boolean getShouldEnablePerfettoSdkTracing();
+    method public boolean getShouldEnableTraceAppTag();
+    property public final java.util.List<androidx.benchmark.MetricCapture> metrics;
+    property public final androidx.benchmark.ProfilerConfig? profiler;
+    property public final boolean shouldEnablePerfettoSdkTracing;
+    property public final boolean shouldEnableTraceAppTag;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract sealed class ProfilerConfig {
+  }
+
+  public static final class ProfilerConfig.MethodTracing extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.MethodTracing();
+  }
+
+  public static final class ProfilerConfig.StackSampling extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.StackSampling();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class TimeCapture extends androidx.benchmark.MetricCapture {
+    ctor public TimeCapture();
+    method public void capturePaused();
+    method public void captureResumed();
+    method public void captureStart(long timeNs);
+    method public void captureStop(long timeNs, long[] output, int offset);
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoCaptureApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public abstract sealed class PerfettoConfig {
+  }
+
+  public static final class PerfettoConfig.Binary extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Binary(byte[] bytes);
+    method public byte[] getBytes();
+    property public final byte[] bytes;
+  }
+
+  public static final class PerfettoConfig.Text extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Text(String text);
+    method public String getText();
+    property public final String text;
+  }
+
+  @SuppressCompatibility @RequiresApi(23) @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTrace {
+    ctor public PerfettoTrace(String path);
+    method public String getPath();
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final String path;
+    field public static final androidx.benchmark.perfetto.PerfettoTrace.Companion Companion;
+  }
+
+  public static final class PerfettoTrace.Companion {
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+}
+
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/OutputsTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/OutputsTest.kt
index 439a395..846d743 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/OutputsTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/OutputsTest.kt
@@ -61,8 +61,8 @@
     @Test
     public fun sanitizeFilename() {
         assertEquals(
-            "testFilename[Thing[]]",
-            Outputs.sanitizeFilename("testFilename[Thing( )]")
+            "testFilename[one-Thing[],two-other]",
+            Outputs.sanitizeFilename("testFilename[one=Thing( ),two:other]")
         )
     }
 
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/IsolationActivity.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/IsolationActivity.kt
index 14f048c..da6635c 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/IsolationActivity.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/IsolationActivity.kt
@@ -57,7 +57,6 @@
 
         if (firstInit) {
             if (!CpuInfo.locked && isSustainedPerformanceModeSupported()) {
-                @Suppress("SyntheticAccessor")
                 sustainedPerformanceModeInUse = true
             }
             application.registerActivityLifecycleCallbacks(activityLifecycleCallbacks)
@@ -96,13 +95,11 @@
 
     override fun onResume() {
         super.onResume()
-        @Suppress("SyntheticAccessor")
         resumed = true
     }
 
     override fun onPause() {
         super.onPause()
-        @Suppress("SyntheticAccessor")
         resumed = false
     }
 
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt
index 979a399..310b07a 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Outputs.kt
@@ -153,6 +153,8 @@
             .replace(" ", "")
             .replace("(", "[")
             .replace(")", "]")
+            .replace("=", "-") // fix trace copying in AndroidX CI
+            .replace(":", "-") // avoid perm error when writing on API 33
     }
 
     fun testOutputFile(filename: String): File {
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/SideEffects.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/SideEffects.kt
index c520311..4310393 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/SideEffects.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/SideEffects.kt
@@ -69,6 +69,7 @@
             "com.google.android.as",
             "com.google.android.calculator",
             "com.google.android.calendar",
+            "com.google.android.carrier",
             "com.google.android.configupdater",
             "com.google.android.contacts",
             "com.google.android.deskclock",
diff --git a/benchmark/benchmark-junit4/api/1.2.0-beta04.txt b/benchmark/benchmark-junit4/api/1.2.0-beta04.txt
new file mode 100644
index 0000000..aea3355
--- /dev/null
+++ b/benchmark/benchmark-junit4/api/1.2.0-beta04.txt
@@ -0,0 +1,35 @@
+// Signature format: 4.0
+package androidx.benchmark.junit4 {
+
+  public class AndroidBenchmarkRunner extends androidx.test.runner.AndroidJUnitRunner {
+    ctor public AndroidBenchmarkRunner();
+  }
+
+  public final class BenchmarkRule implements org.junit.rules.TestRule {
+    ctor public BenchmarkRule();
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public BenchmarkRule(androidx.benchmark.MicrobenchmarkConfig config);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public androidx.benchmark.BenchmarkState getState();
+  }
+
+  public final class BenchmarkRule.Scope {
+    method public inline <T> T runWithTimingDisabled(kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  public final class BenchmarkRuleKt {
+    method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1<? super androidx.benchmark.junit4.BenchmarkRule.Scope,kotlin.Unit> block);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTraceRule implements org.junit.rules.TestRule {
+    ctor public PerfettoTraceRule(optional boolean enableAppTagTracing, optional boolean enableUserspaceTracing, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public boolean getEnableAppTagTracing();
+    method public boolean getEnableUserspaceTracing();
+    method public kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? getTraceCallback();
+    property public final boolean enableAppTagTracing;
+    property public final boolean enableUserspaceTracing;
+    property public final kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback;
+  }
+
+}
+
diff --git a/benchmark/benchmark-junit4/api/res-1.2.0-beta04.txt b/benchmark/benchmark-junit4/api/res-1.2.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-junit4/api/res-1.2.0-beta04.txt
diff --git a/benchmark/benchmark-junit4/api/restricted_1.2.0-beta04.txt b/benchmark/benchmark-junit4/api/restricted_1.2.0-beta04.txt
new file mode 100644
index 0000000..0dab2ea
--- /dev/null
+++ b/benchmark/benchmark-junit4/api/restricted_1.2.0-beta04.txt
@@ -0,0 +1,36 @@
+// Signature format: 4.0
+package androidx.benchmark.junit4 {
+
+  public class AndroidBenchmarkRunner extends androidx.test.runner.AndroidJUnitRunner {
+    ctor public AndroidBenchmarkRunner();
+  }
+
+  public final class BenchmarkRule implements org.junit.rules.TestRule {
+    ctor public BenchmarkRule();
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public BenchmarkRule(androidx.benchmark.MicrobenchmarkConfig config);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public androidx.benchmark.BenchmarkState getState();
+  }
+
+  public final class BenchmarkRule.Scope {
+    method @kotlin.PublishedApi internal androidx.benchmark.BenchmarkState getOuterState();
+    method public inline <T> T runWithTimingDisabled(kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  public final class BenchmarkRuleKt {
+    method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1<? super androidx.benchmark.junit4.BenchmarkRule.Scope,kotlin.Unit> block);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTraceRule implements org.junit.rules.TestRule {
+    ctor public PerfettoTraceRule(optional boolean enableAppTagTracing, optional boolean enableUserspaceTracing, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public boolean getEnableAppTagTracing();
+    method public boolean getEnableUserspaceTracing();
+    method public kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? getTraceCallback();
+    property public final boolean enableAppTagTracing;
+    property public final boolean enableUserspaceTracing;
+    property public final kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback;
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro-junit4/api/1.2.0-beta04.txt b/benchmark/benchmark-macro-junit4/api/1.2.0-beta04.txt
new file mode 100644
index 0000000..d4c3495
--- /dev/null
+++ b/benchmark/benchmark-macro-junit4/api/1.2.0-beta04.txt
@@ -0,0 +1,26 @@
+// Signature format: 4.0
+package androidx.benchmark.macro.junit4 {
+
+  @RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
+    ctor public BaselineProfileRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+  }
+
+  public final class MacrobenchmarkRule implements org.junit.rules.TestRule {
+    ctor public MacrobenchmarkRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro-junit4/api/res-1.2.0-beta04.txt b/benchmark/benchmark-macro-junit4/api/res-1.2.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-macro-junit4/api/res-1.2.0-beta04.txt
diff --git a/benchmark/benchmark-macro-junit4/api/restricted_1.2.0-beta04.txt b/benchmark/benchmark-macro-junit4/api/restricted_1.2.0-beta04.txt
new file mode 100644
index 0000000..d4c3495
--- /dev/null
+++ b/benchmark/benchmark-macro-junit4/api/restricted_1.2.0-beta04.txt
@@ -0,0 +1,26 @@
+// Signature format: 4.0
+package androidx.benchmark.macro.junit4 {
+
+  @RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
+    ctor public BaselineProfileRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, optional int maxIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+    method public void collect(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+  }
+
+  public final class MacrobenchmarkRule implements org.junit.rules.TestRule {
+    ctor public MacrobenchmarkRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+    method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro/api/1.2.0-beta04.txt b/benchmark/benchmark-macro/api/1.2.0-beta04.txt
new file mode 100644
index 0000000..54c8a8c
--- /dev/null
+++ b/benchmark/benchmark-macro/api/1.2.0-beta04.txt
@@ -0,0 +1,261 @@
+// Signature format: 4.0
+package androidx.benchmark.macro {
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric {
+    ctor public AudioUnderrunMetric();
+  }
+
+  public enum BaselineProfileMode {
+    method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.BaselineProfileMode[] values();
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Disable;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Require;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode UseIfAvailable;
+  }
+
+  public abstract sealed class CompilationMode {
+    field public static final androidx.benchmark.macro.CompilationMode.Companion Companion;
+    field public static final androidx.benchmark.macro.CompilationMode DEFAULT;
+  }
+
+  public static final class CompilationMode.Companion {
+  }
+
+  public static final class CompilationMode.Full extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Full();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Ignore();
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.None extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.None();
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Partial();
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
+    method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode();
+    method public int getWarmupIterations();
+    property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode;
+    property public final int warmupIterations;
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi {
+  }
+
+  public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public FrameTimingMetric();
+  }
+
+  public final class MacrobenchmarkScope {
+    ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
+    method public void dropKernelPageCache();
+    method public void dropShaderCache();
+    method public androidx.test.uiautomator.UiDevice getDevice();
+    method public Integer? getIteration();
+    method public String getPackageName();
+    method public void killProcess();
+    method public void killProcess(optional boolean useKillAll);
+    method public void pressHome();
+    method public void pressHome(optional long delayDurationMs);
+    method public void startActivityAndWait();
+    method public void startActivityAndWait(android.content.Intent intent);
+    method public void startActivityAndWait(optional kotlin.jvm.functions.Function1<? super android.content.Intent,kotlin.Unit> block);
+    property public final androidx.test.uiautomator.UiDevice device;
+    property public final Integer? iteration;
+    property public final String packageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryCountersMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryCountersMetric();
+    method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryUsageMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryUsageMetric(androidx.benchmark.macro.MemoryUsageMetric.Mode mode, optional java.util.List<? extends androidx.benchmark.macro.MemoryUsageMetric.SubMetric> subMetrics);
+    method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  public enum MemoryUsageMetric.Mode {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Last;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Max;
+  }
+
+  public enum MemoryUsageMetric.SubMetric {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric Gpu;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric HeapSize;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssAnon;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssFile;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssShmem;
+  }
+
+  public abstract sealed class Metric {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.CaptureInfo {
+    ctor public Metric.CaptureInfo(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int component1();
+    method public String component2();
+    method public String component3();
+    method public androidx.benchmark.macro.StartupMode? component4();
+    method public androidx.benchmark.macro.Metric.CaptureInfo copy(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int getApiLevel();
+    method public androidx.benchmark.macro.StartupMode? getStartupMode();
+    method public String getTargetPackageName();
+    method public String getTestPackageName();
+    property public final int apiLevel;
+    property public final androidx.benchmark.macro.StartupMode? startupMode;
+    property public final String targetPackageName;
+    property public final String testPackageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.Measurement {
+    ctor public Metric.Measurement(String name, double data);
+    ctor public Metric.Measurement(String name, java.util.List<java.lang.Double> dataSamples);
+    method public String component1();
+    method public java.util.List<java.lang.Double> component2();
+    method public boolean component3();
+    method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List<java.lang.Double> data, boolean requireSingleValue);
+    method public java.util.List<java.lang.Double> getData();
+    method public String getName();
+    method public boolean getRequireSingleValue();
+    property public final java.util.List<java.lang.Double> data;
+    property public final String name;
+    property public final boolean requireSingleValue;
+  }
+
+  public final class MetricResultExtensionsKt {
+    method @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static void assertEqualMeasurements(java.util.List<androidx.benchmark.macro.Metric.Measurement> expected, java.util.List<androidx.benchmark.macro.Metric.Measurement> observed, double threshold);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategory {
+    method public static androidx.benchmark.macro.PowerCategory valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategory[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategory CPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory DISPLAY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPS;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MACHINE_LEARNING;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MEMORY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory NETWORK;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory UNCATEGORIZED;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategoryDisplayLevel {
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel BREAKDOWN;
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel TOTAL;
+  }
+
+  @SuppressCompatibility @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class PowerMetric extends androidx.benchmark.macro.Metric {
+    ctor public PowerMetric(androidx.benchmark.macro.PowerMetric.Type type);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public static androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+    field public static final androidx.benchmark.macro.PowerMetric.Companion Companion;
+  }
+
+  public static final class PowerMetric.Companion {
+    method public androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+    method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+  }
+
+  public abstract static sealed class PowerMetric.Type {
+    method public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> getCategories();
+    method public final void setCategories(java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel>);
+    property public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> categories;
+  }
+
+  public static final class PowerMetric.Type.Battery extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Battery();
+  }
+
+  public static final class PowerMetric.Type.Energy extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> energyCategories);
+  }
+
+  public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> powerCategories);
+  }
+
+  public enum StartupMode {
+    method public static androidx.benchmark.macro.StartupMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.StartupMode[] values();
+    enum_constant public static final androidx.benchmark.macro.StartupMode COLD;
+    enum_constant public static final androidx.benchmark.macro.StartupMode HOT;
+    enum_constant public static final androidx.benchmark.macro.StartupMode WARM;
+  }
+
+  public final class StartupTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public StartupTimingMetric();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public abstract class TraceMetric extends androidx.benchmark.macro.Metric {
+    ctor public TraceMetric();
+    method public abstract java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class TraceSectionMetric extends androidx.benchmark.macro.Metric {
+    ctor public TraceSectionMetric(String sectionName, optional androidx.benchmark.macro.TraceSectionMetric.Mode mode, optional boolean targetPackageOnly);
+  }
+
+  public enum TraceSectionMetric.Mode {
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode[] values();
+    enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode First;
+    enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode Sum;
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoTraceProcessorApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class PerfettoTraceProcessor {
+    ctor public PerfettoTraceProcessor();
+    method public <T> T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block);
+    method public static <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+    field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+  }
+
+  public static final class PerfettoTraceProcessor.Companion {
+    method public <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+  }
+
+  public static final class PerfettoTraceProcessor.Session {
+    method public kotlin.sequences.Sequence<androidx.benchmark.perfetto.Row> query(@org.intellij.lang.annotations.Language("sql") String query);
+    method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<java.lang.String,java.lang.Object> {
+    ctor public Row(java.util.Map<java.lang.String,?> map);
+    method public byte[] bytes(String columnName);
+    method public double double(String columnName);
+    method public long long(String columnName);
+    method public byte[]? nullableBytes(String columnName);
+    method public Double? nullableDouble(String columnName);
+    method public Long? nullableLong(String columnName);
+    method public String? nullableString(String columnName);
+    method public String string(String columnName);
+  }
+
+  public final class RowKt {
+    method @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro/api/current.ignore b/benchmark/benchmark-macro/api/current.ignore
deleted file mode 100644
index 84926d3..0000000
--- a/benchmark/benchmark-macro/api/current.ignore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.benchmark.macro.Api29Kt:
-    Removed class androidx.benchmark.macro.Api29Kt
-RemovedClass: androidx.benchmark.macro.BaselineProfilesKt:
-    Removed class androidx.benchmark.macro.BaselineProfilesKt
-RemovedClass: androidx.benchmark.macro.CompilationModeKt:
-    Removed class androidx.benchmark.macro.CompilationModeKt
-RemovedClass: androidx.benchmark.macro.IdeSummaryStringKt:
-    Removed class androidx.benchmark.macro.IdeSummaryStringKt
-RemovedClass: androidx.benchmark.macro.IterationResultKt:
-    Removed class androidx.benchmark.macro.IterationResultKt
-RemovedClass: androidx.benchmark.macro.MacrobenchmarkKt:
-    Removed class androidx.benchmark.macro.MacrobenchmarkKt
-RemovedClass: androidx.benchmark.macro.MetricKt:
-    Removed class androidx.benchmark.macro.MetricKt
-RemovedClass: androidx.benchmark.macro.TagKt:
-    Removed class androidx.benchmark.macro.TagKt
-
-
-RemovedPackage: androidx.benchmark.macro.perfetto:
-    Removed package androidx.benchmark.macro.perfetto
diff --git a/benchmark/benchmark-macro/api/res-1.2.0-beta04.txt b/benchmark/benchmark-macro/api/res-1.2.0-beta04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-macro/api/res-1.2.0-beta04.txt
diff --git a/benchmark/benchmark-macro/api/restricted_1.2.0-beta04.txt b/benchmark/benchmark-macro/api/restricted_1.2.0-beta04.txt
new file mode 100644
index 0000000..9fb21fd
--- /dev/null
+++ b/benchmark/benchmark-macro/api/restricted_1.2.0-beta04.txt
@@ -0,0 +1,283 @@
+// Signature format: 4.0
+package androidx.benchmark.macro {
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric {
+    ctor public AudioUnderrunMetric();
+  }
+
+  public enum BaselineProfileMode {
+    method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.BaselineProfileMode[] values();
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Disable;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Require;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode UseIfAvailable;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class BatteryCharge {
+    method public boolean hasMinimumCharge(optional boolean throwOnMissingMetrics);
+    field public static final androidx.benchmark.macro.BatteryCharge INSTANCE;
+  }
+
+  public abstract sealed class CompilationMode {
+    field public static final androidx.benchmark.macro.CompilationMode.Companion Companion;
+    field public static final androidx.benchmark.macro.CompilationMode DEFAULT;
+  }
+
+  public static final class CompilationMode.Companion {
+  }
+
+  public static final class CompilationMode.Full extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Full();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Ignore();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class CompilationMode.Interpreted extends androidx.benchmark.macro.CompilationMode {
+    field public static final androidx.benchmark.macro.CompilationMode.Interpreted INSTANCE;
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.None extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.None();
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Partial();
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
+    method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode();
+    method public int getWarmupIterations();
+    property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode;
+    property public final int warmupIterations;
+  }
+
+  public final class CompilationModeKt {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static boolean isSupportedWithVmSettings(androidx.benchmark.macro.CompilationMode);
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi {
+  }
+
+  public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public FrameTimingMetric();
+  }
+
+  public final class MacrobenchmarkScope {
+    ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
+    method public void dropKernelPageCache();
+    method public void dropShaderCache();
+    method public androidx.test.uiautomator.UiDevice getDevice();
+    method public Integer? getIteration();
+    method public String getPackageName();
+    method public void killProcess();
+    method public void killProcess(optional boolean useKillAll);
+    method public void pressHome();
+    method public void pressHome(optional long delayDurationMs);
+    method public void startActivityAndWait();
+    method public void startActivityAndWait(android.content.Intent intent);
+    method public void startActivityAndWait(optional kotlin.jvm.functions.Function1<? super android.content.Intent,kotlin.Unit> block);
+    property public final androidx.test.uiautomator.UiDevice device;
+    property public final Integer? iteration;
+    property public final String packageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryCountersMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryCountersMetric();
+    method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryUsageMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryUsageMetric(androidx.benchmark.macro.MemoryUsageMetric.Mode mode, optional java.util.List<? extends androidx.benchmark.macro.MemoryUsageMetric.SubMetric> subMetrics);
+    method public java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  public enum MemoryUsageMetric.Mode {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Last;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Max;
+  }
+
+  public enum MemoryUsageMetric.SubMetric {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric Gpu;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric HeapSize;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssAnon;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssFile;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssShmem;
+  }
+
+  public abstract sealed class Metric {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.CaptureInfo {
+    ctor public Metric.CaptureInfo(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int component1();
+    method public String component2();
+    method public String component3();
+    method public androidx.benchmark.macro.StartupMode? component4();
+    method public androidx.benchmark.macro.Metric.CaptureInfo copy(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int getApiLevel();
+    method public androidx.benchmark.macro.StartupMode? getStartupMode();
+    method public String getTargetPackageName();
+    method public String getTestPackageName();
+    property public final int apiLevel;
+    property public final androidx.benchmark.macro.StartupMode? startupMode;
+    property public final String targetPackageName;
+    property public final String testPackageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.Measurement {
+    ctor public Metric.Measurement(String name, double data);
+    ctor public Metric.Measurement(String name, java.util.List<java.lang.Double> dataSamples);
+    method public String component1();
+    method public java.util.List<java.lang.Double> component2();
+    method public boolean component3();
+    method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List<java.lang.Double> data, boolean requireSingleValue);
+    method public java.util.List<java.lang.Double> getData();
+    method public String getName();
+    method public boolean getRequireSingleValue();
+    property public final java.util.List<java.lang.Double> data;
+    property public final String name;
+    property public final boolean requireSingleValue;
+  }
+
+  public final class MetricResultExtensionsKt {
+    method @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static void assertEqualMeasurements(java.util.List<androidx.benchmark.macro.Metric.Measurement> expected, java.util.List<androidx.benchmark.macro.Metric.Measurement> observed, double threshold);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategory {
+    method public static androidx.benchmark.macro.PowerCategory valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategory[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategory CPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory DISPLAY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPS;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MACHINE_LEARNING;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MEMORY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory NETWORK;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory UNCATEGORIZED;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategoryDisplayLevel {
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel BREAKDOWN;
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel TOTAL;
+  }
+
+  @SuppressCompatibility @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class PowerMetric extends androidx.benchmark.macro.Metric {
+    ctor public PowerMetric(androidx.benchmark.macro.PowerMetric.Type type);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public static androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+    field public static final androidx.benchmark.macro.PowerMetric.Companion Companion;
+  }
+
+  public static final class PowerMetric.Companion {
+    method public androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+    method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+  }
+
+  public abstract static sealed class PowerMetric.Type {
+    method public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> getCategories();
+    method public final void setCategories(java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel>);
+    property public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> categories;
+  }
+
+  public static final class PowerMetric.Type.Battery extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Battery();
+  }
+
+  public static final class PowerMetric.Type.Energy extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Energy(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> energyCategories);
+  }
+
+  public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> powerCategories);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class PowerRail {
+    method public boolean hasMetrics(optional boolean throwOnMissingMetrics);
+    field public static final androidx.benchmark.macro.PowerRail INSTANCE;
+  }
+
+  public enum StartupMode {
+    method public static androidx.benchmark.macro.StartupMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.StartupMode[] values();
+    enum_constant public static final androidx.benchmark.macro.StartupMode COLD;
+    enum_constant public static final androidx.benchmark.macro.StartupMode HOT;
+    enum_constant public static final androidx.benchmark.macro.StartupMode WARM;
+  }
+
+  @RequiresApi(29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class StartupTimingLegacyMetric extends androidx.benchmark.macro.Metric {
+    ctor public StartupTimingLegacyMetric();
+  }
+
+  public final class StartupTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public StartupTimingMetric();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public abstract class TraceMetric extends androidx.benchmark.macro.Metric {
+    ctor public TraceMetric();
+    method public abstract java.util.List<androidx.benchmark.macro.Metric.Measurement> getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class TraceSectionMetric extends androidx.benchmark.macro.Metric {
+    ctor public TraceSectionMetric(String sectionName, optional androidx.benchmark.macro.TraceSectionMetric.Mode mode, optional boolean targetPackageOnly);
+  }
+
+  public enum TraceSectionMetric.Mode {
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode[] values();
+    enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode First;
+    enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode Sum;
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoTraceProcessorApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class PerfettoTraceProcessor {
+    ctor public PerfettoTraceProcessor();
+    method public <T> T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block);
+    method public static <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+    field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+  }
+
+  public static final class PerfettoTraceProcessor.Companion {
+    method public <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+  }
+
+  public static final class PerfettoTraceProcessor.Session {
+    method public kotlin.sequences.Sequence<androidx.benchmark.perfetto.Row> query(@org.intellij.lang.annotations.Language("sql") String query);
+    method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map<java.lang.String,java.lang.Object> {
+    ctor public Row(java.util.Map<java.lang.String,?> map);
+    method public byte[] bytes(String columnName);
+    method public double double(String columnName);
+    method public long long(String columnName);
+    method public byte[]? nullableBytes(String columnName);
+    method public Double? nullableDouble(String columnName);
+    method public Long? nullableLong(String columnName);
+    method public String? nullableString(String columnName);
+    method public String string(String columnName);
+  }
+
+  public final class RowKt {
+    method @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro/api/restricted_current.ignore b/benchmark/benchmark-macro/api/restricted_current.ignore
deleted file mode 100644
index e6c9b40..0000000
--- a/benchmark/benchmark-macro/api/restricted_current.ignore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.benchmark.macro.Api29Kt:
-    Removed class androidx.benchmark.macro.Api29Kt
-RemovedClass: androidx.benchmark.macro.BaselineProfilesKt:
-    Removed class androidx.benchmark.macro.BaselineProfilesKt
-RemovedClass: androidx.benchmark.macro.FrameTimingGfxInfoMetric:
-    Removed class androidx.benchmark.macro.FrameTimingGfxInfoMetric
-RemovedClass: androidx.benchmark.macro.IdeSummaryStringKt:
-    Removed class androidx.benchmark.macro.IdeSummaryStringKt
-RemovedClass: androidx.benchmark.macro.IterationResultKt:
-    Removed class androidx.benchmark.macro.IterationResultKt
-RemovedClass: androidx.benchmark.macro.MacrobenchmarkKt:
-    Removed class androidx.benchmark.macro.MacrobenchmarkKt
-RemovedClass: androidx.benchmark.macro.MetricKt:
-    Removed class androidx.benchmark.macro.MetricKt
-RemovedClass: androidx.benchmark.macro.TagKt:
-    Removed class androidx.benchmark.macro.TagKt
-
-
-RemovedPackage: androidx.benchmark.macro.perfetto:
-    Removed package androidx.benchmark.macro.perfetto
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
index b5fb7da..31d3b0a 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
@@ -360,6 +360,22 @@
         assertThat(enableWarmTracingResponse.resultCode).isEqualTo(RESULT_CODE_SUCCESS)
     }
 
+    @Test
+    fun test_handshake_framework_cold_start_app_terminated_on_error() {
+        assumeTrue(isAbiSupported())
+        assumeTrue(Build.VERSION.SDK_INT >= minSupportedSdk)
+        assumeTrue(testConfig.sdkDelivery == MISSING)
+
+        // perform a handshake setting up cold start tracing
+        val handshake = constructPerfettoHandshake()
+        val enableColdTracingResponse = handshake.enableTracingColdStart()
+        assertThat(enableColdTracingResponse.resultCode).isEqualTo(RESULT_CODE_ERROR_BINARY_MISSING)
+
+        // verify that the app process has been terminated
+        // in the non-error case we already have these verifications in other tests
+        assertPackageAlive(false)
+    }
+
     private fun killProcess() {
         scope.killProcess()
         assertPackageAlive(false)
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
index 4b3ba98..bf0e0ff 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
@@ -16,7 +16,6 @@
 
 package androidx.benchmark.macro
 
-import android.annotation.SuppressLint
 import android.os.Build
 import androidx.annotation.RequiresApi
 import androidx.annotation.RestrictTo
@@ -190,7 +189,6 @@
     override fun start() {}
     override fun stop() {}
 
-    @SuppressLint("SyntheticAccessor")
     override fun getResult(
         captureInfo: CaptureInfo,
         traceSession: PerfettoTraceProcessor.Session
@@ -239,7 +237,6 @@
     override fun stop() {
     }
 
-    @SuppressLint("SyntheticAccessor")
     override fun getResult(
         captureInfo: CaptureInfo,
         traceSession: PerfettoTraceProcessor.Session
@@ -435,7 +432,6 @@
     override fun stop() {
     }
 
-    @SuppressLint("SyntheticAccessor")
     override fun getResult(
         captureInfo: CaptureInfo,
         traceSession: PerfettoTraceProcessor.Session
diff --git a/benchmark/integration-tests/macrobenchmark-target/lint-baseline.xml b/benchmark/integration-tests/macrobenchmark-target/lint-baseline.xml
index 7a8a126..f0d6ddc 100644
--- a/benchmark/integration-tests/macrobenchmark-target/lint-baseline.xml
+++ b/benchmark/integration-tests/macrobenchmark-target/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
@@ -46,4 +46,40 @@
             file="src/main/java/androidx/benchmark/integration/macrobenchmark/target/TrivialStartupActivity.kt"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
 </issues>
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/TrivialStartupFullyDrawnActivity.kt b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/TrivialStartupFullyDrawnActivity.kt
index 42cb4fe..ba49074 100644
--- a/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/TrivialStartupFullyDrawnActivity.kt
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/TrivialStartupFullyDrawnActivity.kt
@@ -16,7 +16,6 @@
 
 package androidx.benchmark.integration.macrobenchmark.target
 
-import android.annotation.SuppressLint
 import android.os.Bundle
 import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
@@ -25,7 +24,6 @@
 /**
  * Trivial activity which triggers reportFullyDrawn ~500ms after resume
  */
-@SuppressLint("SyntheticAccessor")
 class TrivialStartupFullyDrawnActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
diff --git a/biometric/buildSrc b/biometric/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/biometric/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/biometric/settings.gradle b/biometric/settings.gradle
index 1fc4963..36550e6 100644
--- a/biometric/settings.gradle
+++ b/biometric/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattClientTest.kt b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattClientTest.kt
index 79560e5..7bab0cd 100644
--- a/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattClientTest.kt
+++ b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattClientTest.kt
@@ -31,7 +31,6 @@
 import androidx.bluetooth.BluetoothDevice
 import androidx.bluetooth.BluetoothLe
 import androidx.bluetooth.GattClient
-import java.nio.ByteBuffer
 import java.util.UUID
 import java.util.concurrent.atomic.AtomicInteger
 import junit.framework.TestCase.fail
@@ -476,12 +475,4 @@
             )
         }
     }
-
-    private fun Int.toByteArray(): ByteArray {
-        return ByteBuffer.allocate(Int.SIZE_BYTES).putInt(this).array()
-    }
-
-    private fun ByteArray.toInt(): Int {
-        return ByteBuffer.wrap(this).int
-    }
 }
diff --git a/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt
index c7027b3..612db31 100644
--- a/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt
+++ b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/RobolectricGattServerTest.kt
@@ -32,7 +32,6 @@
 import androidx.bluetooth.GattServer
 import androidx.bluetooth.GattServerRequest
 import androidx.bluetooth.GattService
-import java.nio.ByteBuffer
 import java.util.UUID
 import junit.framework.TestCase.fail
 import kotlinx.coroutines.CompletableDeferred
@@ -72,23 +71,20 @@
 
         private val cccdUuid = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")
 
-        private val readCharacteristic = GattCharacteristic.of(
-            readCharUuid,
-            PROPERTY_READ
-        )
-        private val writeCharacteristic = GattCharacteristic.of(
+        private val readCharacteristic = GattCharacteristic(readCharUuid, PROPERTY_READ)
+        private val writeCharacteristic = GattCharacteristic(
             writeCharUuid, PROPERTY_READ or PROPERTY_WRITE
         )
-        private val notifyCharacteristic = GattCharacteristic.of(
+        private val notifyCharacteristic = GattCharacteristic(
             notifyCharUuid, PROPERTY_READ or PROPERTY_NOTIFY
         )
-        private val unknownCharacteristic = GattCharacteristic.of(unknownCharUuid, 0)
+        private val unknownCharacteristic = GattCharacteristic(unknownCharUuid, 0)
 
-        private val service1 = GattService.of(
+        private val service1 = GattService(
             serviceUuid1,
             listOf(readCharacteristic, writeCharacteristic, notifyCharacteristic)
         )
-        private val service2 = GattService.of(serviceUuid2, listOf())
+        private val service2 = GattService(serviceUuid2, listOf())
     }
 
     @Before
@@ -470,11 +466,3 @@
         }
     }
 }
-
-private fun Int.toByteArray(): ByteArray {
-    return ByteBuffer.allocate(Int.SIZE_BYTES).putInt(this).array()
-}
-
-private fun ByteArray.toInt(): Int {
-    return ByteBuffer.wrap(this).int
-}
diff --git a/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/TestUtils.kt b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/TestUtils.kt
new file mode 100644
index 0000000..d3872cf
--- /dev/null
+++ b/bluetooth/bluetooth-testing/src/test/kotlin/androidx/bluetooth/testing/TestUtils.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.bluetooth.testing
+
+import java.nio.ByteBuffer
+
+internal fun Int.toByteArray(): ByteArray {
+    return ByteBuffer.allocate(Int.SIZE_BYTES).putInt(this).array()
+}
+
+internal fun ByteArray.toInt(): Int {
+    return ByteBuffer.wrap(this).int
+}
diff --git a/bluetooth/bluetooth/api/current.txt b/bluetooth/bluetooth/api/current.txt
index b8ff05b..835bff8 100644
--- a/bluetooth/bluetooth/api/current.txt
+++ b/bluetooth/bluetooth/api/current.txt
@@ -78,14 +78,14 @@
   }
 
   public final class GattCharacteristic {
+    ctor public GattCharacteristic(java.util.UUID uuid, int properties);
     method public int getProperties();
     method public java.util.UUID getUuid();
-    method public static androidx.bluetooth.GattCharacteristic of(java.util.UUID uuid, int properties);
     property public final int properties;
     property public final java.util.UUID uuid;
     field public static final androidx.bluetooth.GattCharacteristic.Companion Companion;
     field public static final int PROPERTY_BROADCAST = 1; // 0x1
-    field public static final int PROPERTY_EXTENDS_PROP = 128; // 0x80
+    field public static final int PROPERTY_EXTENDS_PROPS = 128; // 0x80
     field public static final int PROPERTY_INDICATE = 32; // 0x20
     field public static final int PROPERTY_NOTIFY = 16; // 0x10
     field public static final int PROPERTY_READ = 2; // 0x2
@@ -95,21 +95,15 @@
   }
 
   public static final class GattCharacteristic.Companion {
-    method public androidx.bluetooth.GattCharacteristic of(java.util.UUID uuid, int properties);
   }
 
   public final class GattService {
+    ctor public GattService(java.util.UUID uuid, java.util.List<androidx.bluetooth.GattCharacteristic> characteristics);
     method public androidx.bluetooth.GattCharacteristic? getCharacteristic(java.util.UUID uuid);
     method public java.util.List<androidx.bluetooth.GattCharacteristic> getCharacteristics();
     method public java.util.UUID getUuid();
-    method public static androidx.bluetooth.GattService of(java.util.UUID uuid, java.util.List<androidx.bluetooth.GattCharacteristic> characteristics);
     property public final java.util.List<androidx.bluetooth.GattCharacteristic> characteristics;
     property public final java.util.UUID uuid;
-    field public static final androidx.bluetooth.GattService.Companion Companion;
-  }
-
-  public static final class GattService.Companion {
-    method public androidx.bluetooth.GattService of(java.util.UUID uuid, java.util.List<androidx.bluetooth.GattCharacteristic> characteristics);
   }
 
   public final class ScanFilter {
diff --git a/bluetooth/bluetooth/api/restricted_current.txt b/bluetooth/bluetooth/api/restricted_current.txt
index b8ff05b..835bff8 100644
--- a/bluetooth/bluetooth/api/restricted_current.txt
+++ b/bluetooth/bluetooth/api/restricted_current.txt
@@ -78,14 +78,14 @@
   }
 
   public final class GattCharacteristic {
+    ctor public GattCharacteristic(java.util.UUID uuid, int properties);
     method public int getProperties();
     method public java.util.UUID getUuid();
-    method public static androidx.bluetooth.GattCharacteristic of(java.util.UUID uuid, int properties);
     property public final int properties;
     property public final java.util.UUID uuid;
     field public static final androidx.bluetooth.GattCharacteristic.Companion Companion;
     field public static final int PROPERTY_BROADCAST = 1; // 0x1
-    field public static final int PROPERTY_EXTENDS_PROP = 128; // 0x80
+    field public static final int PROPERTY_EXTENDS_PROPS = 128; // 0x80
     field public static final int PROPERTY_INDICATE = 32; // 0x20
     field public static final int PROPERTY_NOTIFY = 16; // 0x10
     field public static final int PROPERTY_READ = 2; // 0x2
@@ -95,21 +95,15 @@
   }
 
   public static final class GattCharacteristic.Companion {
-    method public androidx.bluetooth.GattCharacteristic of(java.util.UUID uuid, int properties);
   }
 
   public final class GattService {
+    ctor public GattService(java.util.UUID uuid, java.util.List<androidx.bluetooth.GattCharacteristic> characteristics);
     method public androidx.bluetooth.GattCharacteristic? getCharacteristic(java.util.UUID uuid);
     method public java.util.List<androidx.bluetooth.GattCharacteristic> getCharacteristics();
     method public java.util.UUID getUuid();
-    method public static androidx.bluetooth.GattService of(java.util.UUID uuid, java.util.List<androidx.bluetooth.GattCharacteristic> characteristics);
     property public final java.util.List<androidx.bluetooth.GattCharacteristic> characteristics;
     property public final java.util.UUID uuid;
-    field public static final androidx.bluetooth.GattService.Companion Companion;
-  }
-
-  public static final class GattService.Companion {
-    method public androidx.bluetooth.GattService of(java.util.UUID uuid, java.util.List<androidx.bluetooth.GattCharacteristic> characteristics);
   }
 
   public final class ScanFilter {
diff --git a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattCharacteristicTest.kt b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattCharacteristicTest.kt
index 048cf655..dc1d08f 100644
--- a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattCharacteristicTest.kt
+++ b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattCharacteristicTest.kt
@@ -31,7 +31,7 @@
             FwkCharacteristic.PROPERTY_BROADCAST to
                 GattCharacteristic.PROPERTY_BROADCAST,
             FwkCharacteristic.PROPERTY_EXTENDED_PROPS to
-                GattCharacteristic.PROPERTY_EXTENDS_PROP,
+                GattCharacteristic.PROPERTY_EXTENDS_PROPS,
             FwkCharacteristic.PROPERTY_INDICATE to
                 GattCharacteristic.PROPERTY_INDICATE,
             FwkCharacteristic.PROPERTY_NOTIFY
@@ -63,7 +63,7 @@
 
         val properties = GattCharacteristic.PROPERTY_READ
 
-        val characteristic = GattCharacteristic.of(uuid, properties)
+        val characteristic = GattCharacteristic(uuid, properties)
 
         Assert.assertEquals(uuid, characteristic.uuid)
         Assert.assertEquals(properties, characteristic.properties)
diff --git a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattServiceTest.kt b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattServiceTest.kt
index babeb61e..b32eab9 100644
--- a/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattServiceTest.kt
+++ b/bluetooth/bluetooth/src/androidTest/java/androidx/bluetooth/GattServiceTest.kt
@@ -58,13 +58,13 @@
         val charUuid2 = UUID.randomUUID()
         val charUuid3 = UUID.randomUUID()
 
-        val char1 = GattCharacteristic.of(charUuid1, /*properties=*/0)
-        val char2 = GattCharacteristic.of(charUuid2, /*properties=*/0)
-        val char3 = GattCharacteristic.of(charUuid3, /*properties=*/0)
+        val char1 = GattCharacteristic(charUuid1, /*properties=*/0)
+        val char2 = GattCharacteristic(charUuid2, /*properties=*/0)
+        val char3 = GattCharacteristic(charUuid3, /*properties=*/0)
 
         val characteristics = mutableListOf(char1, char2)
 
-        val gattService = GattService.of(serviceUuid, characteristics)
+        val gattService = GattService(serviceUuid, characteristics)
 
         assertEquals(serviceUuid, gattService.uuid)
         assertEquals(2, gattService.characteristics.size)
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattCharacteristic.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattCharacteristic.kt
index c567f8e..9a6011f 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattCharacteristic.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattCharacteristic.kt
@@ -17,6 +17,7 @@
 package androidx.bluetooth
 
 import android.bluetooth.BluetoothGattCharacteristic as FwkCharacteristic
+import androidx.annotation.IntDef
 import androidx.annotation.RestrictTo
 import java.util.UUID
 
@@ -28,6 +29,21 @@
     @set:RestrictTo(RestrictTo.Scope.LIBRARY)
     var fwkCharacteristic: FwkCharacteristic
 ) {
+    @Target(AnnotationTarget.TYPE)
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @Retention(AnnotationRetention.SOURCE)
+    @IntDef(flag = true, value = [
+        PROPERTY_BROADCAST,
+        PROPERTY_READ,
+        PROPERTY_WRITE_NO_RESPONSE,
+        PROPERTY_WRITE,
+        PROPERTY_NOTIFY,
+        PROPERTY_INDICATE,
+        PROPERTY_SIGNED_WRITE,
+        PROPERTY_EXTENDS_PROPS
+    ])
+    annotation class Property
+
     companion object {
         /**
          * It permits broadcasts of the characteristic.
@@ -67,13 +83,10 @@
         /**
          * Additional characteristic properties are defined.
          */
-        const val PROPERTY_EXTENDS_PROP = FwkCharacteristic.PROPERTY_EXTENDED_PROPS
+        const val PROPERTY_EXTENDS_PROPS = FwkCharacteristic.PROPERTY_EXTENDED_PROPS
 
-        /**
-         * Creates a [GattCharacteristic] instance for a GATT server.
-         */
         @JvmStatic
-        fun of(uuid: UUID, properties: Int): GattCharacteristic {
+        private fun getPermissionsWithProperties(properties: @Property Int): Int {
             var permissions = 0
             if ((properties and PROPERTY_READ) != 0) {
                 permissions = permissions or FwkCharacteristic.PERMISSION_READ
@@ -84,11 +97,14 @@
             if ((properties and PROPERTY_SIGNED_WRITE) != 0) {
                 permissions = permissions or FwkCharacteristic.PERMISSION_WRITE_SIGNED
             }
-            val fwkCharacteristic = FwkCharacteristic(uuid, properties, permissions)
-            return GattCharacteristic(fwkCharacteristic)
+            return permissions
         }
     }
 
+    constructor(uuid: UUID, properties: @Property Int) :
+        this(FwkCharacteristic(uuid, properties, getPermissionsWithProperties(properties))) {
+    }
+
     /**
      * The UUID of the characteristic.
      */
@@ -98,7 +114,7 @@
     /**
      * The properties of the characteristic.
      */
-    val properties: Int
+    val properties: @Property Int
         get() = fwkCharacteristic.properties
 
     /**
diff --git a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattService.kt b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattService.kt
index be68d9c..1372c32 100644
--- a/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattService.kt
+++ b/bluetooth/bluetooth/src/main/java/androidx/bluetooth/GattService.kt
@@ -26,28 +26,28 @@
     internal val fwkService: FwkService,
     characteristics: List<GattCharacteristic>? = null
 ) {
+    /**
+     * the UUID of the service
+     */
     val uuid: UUID
         get() = fwkService.uuid
+
+    /**
+     * a list of characteristics included in the service
+     */
     val characteristics: List<GattCharacteristic>
 
+    constructor(uuid: UUID, characteristics: List<GattCharacteristic>) :
+        this(FwkService(uuid, FwkService.SERVICE_TYPE_PRIMARY), characteristics) {
+        characteristics.forEach { fwkService.addCharacteristic(it.fwkCharacteristic) }
+    }
+
     init {
         this.characteristics = characteristics?.toList()
             ?: fwkService.characteristics.map { GattCharacteristic(it) }
         this.characteristics.forEach { it.service = this }
     }
 
-    companion object {
-        /**
-         * Creates a [GattService] instance for a GATT server.
-         */
-        @JvmStatic
-        fun of(uuid: UUID, characteristics: List<GattCharacteristic>): GattService {
-            val fwkService = FwkService(uuid, FwkService.SERVICE_TYPE_PRIMARY)
-            characteristics.forEach { fwkService.addCharacteristic(it.fwkCharacteristic) }
-            return GattService(fwkService, characteristics)
-        }
-    }
-
     /**
      * Gets a [GattCharacteristic] in the service with the given UUID.
      *
diff --git a/bluetooth/integration-tests/testapp/lint-baseline.xml b/bluetooth/integration-tests/testapp/lint-baseline.xml
index b71b1a5..512102e 100644
--- a/bluetooth/integration-tests/testapp/lint-baseline.xml
+++ b/bluetooth/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="DiffUtilEquals"
@@ -10,4 +10,40 @@
             file="src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerAdapter.kt"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="BluetoothLe.openGattServer can only be called from within the same library (androidx.bluetooth:bluetooth)"
+        errorLine1="            bluetoothLe.openGattServer(viewModel.gattServerServices).collect {"
+        errorLine2="                        ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GattServerConnectionRequest.accept can only be called from within the same library (androidx.bluetooth:bluetooth)"
+        errorLine1="                    it.accept {"
+        errorLine2="                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GattServerConnectionRequest.accept can only be called from within the same library (androidx.bluetooth:bluetooth)"
+        errorLine1="                    it.accept {"
+        errorLine2="                              ^">
+        <location
+            file="src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GattServerScope.getRequests can only be called from within the same library (androidx.bluetooth:bluetooth)"
+        errorLine1="                            requests.collect {"
+        errorLine2="                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt"/>
+    </issue>
+
 </issues>
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
index fa4374f..9f1ee65 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.kt
@@ -372,7 +372,7 @@
                             else -> editTextInput
                         }
                     )
-                    val service = GattService.of(uuid, listOf())
+                    val service = GattService(uuid, listOf())
                     viewModel.addGattService(service)
                     gattServerServicesAdapter
                         ?.notifyItemInserted(viewModel.gattServerServices.size - 1)
@@ -439,7 +439,7 @@
                             else -> uuidText
                         }
                     )
-                    val sampleCharacteristic = GattCharacteristic.of(uuid, properties)
+                    val sampleCharacteristic = GattCharacteristic(uuid, properties)
 
                     val index = viewModel.gattServerServices.indexOf(bluetoothGattService)
                     viewModel.addGattCharacteristic(bluetoothGattService, sampleCharacteristic)
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
index c303c0d..ba55df3 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserViewModel.kt
@@ -85,7 +85,7 @@
     fun addGattCharacteristic(service: GattService, characteristic: GattCharacteristic) {
         val index = _gattServerServices.indexOf(service)
         if (index < 0) return;
-        _gattServerServices[index] = GattService.of(service.uuid,
+        _gattServerServices[index] = GattService(service.uuid,
             service.characteristics.toMutableList().apply {
                 add(characteristic)
             }
diff --git a/browser/browser/api/api_lint.ignore b/browser/browser/api/api_lint.ignore
index 417358d..68c85ec 100644
--- a/browser/browser/api/api_lint.ignore
+++ b/browser/browser/api/api_lint.ignore
@@ -13,6 +13,10 @@
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.ACTION_BUTTON_BUNDLE`, was `android.support.customtabs.extra.ACTION_BUTTON_BUNDLE`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_CLOSE_BUTTON_ICON:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.CLOSE_BUTTON_ICON`, was `android.support.customtabs.extra.CLOSE_BUTTON_ICON`
+ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_DISABLE_BOOKMARKS_BUTTON:
+    Inconsistent extra value; expected `androidx.browser.customtabs.extra.DISABLE_BOOKMARKS_BUTTON`, was `org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_STAR_BUTTON`
+ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_DISABLE_DOWNLOAD_BUTTON:
+    Inconsistent extra value; expected `androidx.browser.customtabs.extra.DISABLE_DOWNLOAD_BUTTON`, was `org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_DOWNLOAD_BUTTON`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_ENABLE_INSTANT_APPS:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.ENABLE_INSTANT_APPS`, was `android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_ENABLE_URLBAR_HIDING:
@@ -31,8 +35,12 @@
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.REMOTEVIEWS_VIEW_IDS`, was `android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SECONDARY_TOOLBAR_COLOR:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.SECONDARY_TOOLBAR_COLOR`, was `android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR`
+ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER:
+    Inconsistent extra value; expected `androidx.browser.customtabs.extra.SEND_TO_EXTERNAL_DEFAULT_HANDLER`, was `android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SESSION:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.SESSION`, was `android.support.customtabs.extra.SESSION`
+ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR:
+    Inconsistent extra value; expected `androidx.browser.customtabs.extra.SHOW_ON_TOOLBAR`, was `android.support.customtabs.customaction.SHOW_ON_TOOLBAR`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_TINT_ACTION_BUTTON:
     Inconsistent extra value; expected `androidx.browser.customtabs.extra.TINT_ACTION_BUTTON`, was `android.support.customtabs.extra.TINT_ACTION_BUTTON`
 ActionValue: androidx.browser.customtabs.CustomTabsIntent#EXTRA_TITLE_VISIBILITY_STATE:
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index 81804aa..4878f05 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -105,6 +105,12 @@
     method @Dimension(unit=androidx.annotation.Dimension.PX) public static int getInitialActivityHeightPx(android.content.Intent);
     method public static int getMaxToolbarItems();
     method @Dimension(unit=androidx.annotation.Dimension.DP) public static int getToolbarCornerRadiusDp(android.content.Intent);
+    method public static String? getTranslateLanguage(android.content.Intent);
+    method public static boolean isBackgroundInteractionEnabled(android.content.Intent);
+    method public static boolean isBookmarksButtonEnabled(android.content.Intent);
+    method public static boolean isDownloadButtonEnabled(android.content.Intent);
+    method public static boolean isSendToExternalDefaultHandlerEnabled(android.content.Intent);
+    method public static boolean isShowOnToolbarEnabled(android.content.Intent);
     method public void launchUrl(android.content.Context, android.net.Uri);
     method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
     method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
@@ -124,6 +130,9 @@
     field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
     field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
     field @Deprecated public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+    field public static final String EXTRA_DISABLE_BOOKMARKS_BUTTON = "org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_STAR_BUTTON";
+    field public static final String EXTRA_DISABLE_DOWNLOAD_BUTTON = "org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_DOWNLOAD_BUTTON";
+    field public static final String EXTRA_ENABLE_BACKGROUND_INTERACTION = "androidx.browser.customtabs.extra.ENABLE_BACKGROUND_INTERACTION";
     field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
     field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
     field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
@@ -136,13 +145,16 @@
     field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
     field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
     field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+    field public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER = "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER";
     field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
     field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
+    field public static final String EXTRA_SHOW_ON_TOOLBAR = "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
     field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
     field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
     field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
     field public static final String EXTRA_TOOLBAR_CORNER_RADIUS_DP = "androidx.browser.customtabs.extra.TOOLBAR_CORNER_RADIUS_DP";
     field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+    field public static final String EXTRA_TRANSLATE_LANGUAGE = "androidx.browser.customtabs.extra.TRANSLATE_LANGUAGE";
     field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
     field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
     field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
@@ -168,12 +180,15 @@
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setBackgroundInteractionEnabled(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setBookmarksButtonEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonPosition(int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultShareMenuItemEnabled(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setDownloadButtonEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
@@ -182,12 +197,15 @@
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarDividerColor(@ColorInt int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setSendToExternalDefaultHandlerEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowOnToolbarEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarCornerRadiusDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setTranslateLanguage(String);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setUrlBarHidingEnabled(boolean);
   }
 
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 30e1d8e..2eab941 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -116,6 +116,12 @@
     method @Dimension(unit=androidx.annotation.Dimension.PX) public static int getInitialActivityHeightPx(android.content.Intent);
     method public static int getMaxToolbarItems();
     method @Dimension(unit=androidx.annotation.Dimension.DP) public static int getToolbarCornerRadiusDp(android.content.Intent);
+    method public static String? getTranslateLanguage(android.content.Intent);
+    method public static boolean isBackgroundInteractionEnabled(android.content.Intent);
+    method public static boolean isBookmarksButtonEnabled(android.content.Intent);
+    method public static boolean isDownloadButtonEnabled(android.content.Intent);
+    method public static boolean isSendToExternalDefaultHandlerEnabled(android.content.Intent);
+    method public static boolean isShowOnToolbarEnabled(android.content.Intent);
     method public void launchUrl(android.content.Context, android.net.Uri);
     method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
     method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
@@ -135,6 +141,9 @@
     field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
     field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
     field @Deprecated public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+    field public static final String EXTRA_DISABLE_BOOKMARKS_BUTTON = "org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_STAR_BUTTON";
+    field public static final String EXTRA_DISABLE_DOWNLOAD_BUTTON = "org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_DOWNLOAD_BUTTON";
+    field public static final String EXTRA_ENABLE_BACKGROUND_INTERACTION = "androidx.browser.customtabs.extra.ENABLE_BACKGROUND_INTERACTION";
     field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
     field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
     field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
@@ -147,13 +156,16 @@
     field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
     field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
     field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+    field public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER = "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER";
     field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
     field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
+    field public static final String EXTRA_SHOW_ON_TOOLBAR = "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
     field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
     field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
     field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
     field public static final String EXTRA_TOOLBAR_CORNER_RADIUS_DP = "androidx.browser.customtabs.extra.TOOLBAR_CORNER_RADIUS_DP";
     field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+    field public static final String EXTRA_TRANSLATE_LANGUAGE = "androidx.browser.customtabs.extra.TRANSLATE_LANGUAGE";
     field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
     field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
     field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
@@ -179,12 +191,15 @@
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setBackgroundInteractionEnabled(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setBookmarksButtonEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonPosition(int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultShareMenuItemEnabled(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setDownloadButtonEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
@@ -193,12 +208,15 @@
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarDividerColor(@ColorInt int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setSendToExternalDefaultHandlerEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowOnToolbarEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarCornerRadiusDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setTranslateLanguage(String);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setUrlBarHidingEnabled(boolean);
   }
 
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
index 0142df3..d19d42f 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
@@ -154,6 +154,49 @@
             "android.support.customtabs.extra.TITLE_VISIBILITY";
 
     /**
+     * Extra to disable the bookmarks button in the overflow menu.
+     */
+    public static final String EXTRA_DISABLE_BOOKMARKS_BUTTON =
+            "org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_STAR_BUTTON";
+
+    /**
+     * Extra to disable the download button in the overflow menu.
+     */
+    public static final String EXTRA_DISABLE_DOWNLOAD_BUTTON =
+            "org.chromium.chrome.browser.customtabs.EXTRA_DISABLE_DOWNLOAD_BUTTON";
+
+    /**
+     * Extra to favor sending initial urls to external handler apps, if possible.
+     *
+     * A Custom Tab Intent from a Custom Tab session will always have the package set,
+     * so the Intent will always be to the browser. This extra can be used to allow
+     * the initial Intent navigation chain to leave the browser.
+     */
+    public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER =
+            "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER";
+
+    /**
+     * Extra that specifies the target language the Translate UI should be triggered with.
+     */
+    public static final String EXTRA_TRANSLATE_LANGUAGE =
+            "androidx.browser.customtabs.extra.TRANSLATE_LANGUAGE";
+
+    /**
+     * Extra that, when set to false, disables interactions with the background app
+     * when a Partial Custom Tab is launched.
+     */
+    public static final String EXTRA_ENABLE_BACKGROUND_INTERACTION =
+            "androidx.browser.customtabs.extra.ENABLE_BACKGROUND_INTERACTION";
+
+    /**
+     * Extra that enables the client to add an additional action button to the toolbar.
+     * If the bitmap icon does not fit on the toolbar then the action button will be
+     * added to the secondary toolbar.
+     */
+    public static final String EXTRA_SHOW_ON_TOOLBAR =
+            "android.support.customtabs.customaction.SHOW_ON_TOOLBAR";
+
+    /**
      * Don't show any title. Shows only the domain.
      */
     public static final int NO_TITLE = 0;
@@ -1045,6 +1088,79 @@
         }
 
         /**
+         * Enables or disables the bookmarks button in the overflow menu. The button
+         * is enabled by default.
+         *
+         * @param enabled Whether the start button is enabled.
+         */
+        @NonNull
+        public Builder setBookmarksButtonEnabled(boolean enabled) {
+            mIntent.putExtra(EXTRA_DISABLE_BOOKMARKS_BUTTON, !enabled);
+            return this;
+        }
+
+        /**
+         * Enables or disables the download button in the overflow menu. The button
+         * is enabled by default.
+         *
+         * @param enabled Whether the download button is enabled.
+         */
+        @NonNull
+        public Builder setDownloadButtonEnabled(boolean enabled) {
+            mIntent.putExtra(EXTRA_DISABLE_DOWNLOAD_BUTTON, !enabled);
+            return this;
+        }
+
+        /**
+         * Enables sending initial urls to external handler apps, if possible.
+         *
+         * @param enabled Whether to send urls to external handler.
+         */
+        @NonNull
+        public Builder setSendToExternalDefaultHandlerEnabled(boolean enabled) {
+            mIntent.putExtra(EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER, enabled);
+            return this;
+        }
+
+        /**
+         * Specifies the target language the Translate UI should be triggered with.
+         *
+         * @param lang Language code for the translate UI. Should be in the format of
+         *        ISO 639 language code.
+         */
+        @NonNull
+        public Builder setTranslateLanguage(@NonNull String lang) {
+            mIntent.putExtra(EXTRA_TRANSLATE_LANGUAGE, lang);
+            return this;
+        }
+
+        /**
+         * Enables the capability of the interaction with background.
+         *
+         * Enables the interactions with the background app when a Partial Custom Tab is launched.
+         *
+         * @param enabled Whether the background interaction is enabled.
+         */
+        @NonNull
+        public Builder setBackgroundInteractionEnabled(boolean enabled) {
+            mIntent.putExtra(EXTRA_ENABLE_BACKGROUND_INTERACTION, enabled);
+            return this;
+        }
+
+        /**
+         * Enables the client to add an additional action button to the toolbar. If the bitmap
+         * icon does not fit on the toolbar then the action button will be added to the secondary
+         * toolbar.
+         *
+         * @param enabled Whether the additional actions can be added to the toolbar.
+         */
+        @NonNull
+        public Builder setShowOnToolbarEnabled(boolean enabled) {
+            mIntent.putExtra(EXTRA_SHOW_ON_TOOLBAR, enabled);
+            return this;
+        }
+
+        /**
          * Combines all the options that have been set and returns a new {@link CustomTabsIntent}
          * object.
          */
@@ -1228,6 +1344,57 @@
         return intent.getIntExtra(EXTRA_CLOSE_BUTTON_POSITION, CLOSE_BUTTON_POSITION_DEFAULT);
     }
 
+    /**
+     * @return Whether the bookmarks button is enabled.
+     * @see CustomTabsIntent#EXTRA_DISABLE_BOOKMARKS_BUTTON
+     */
+    public static boolean isBookmarksButtonEnabled(@NonNull Intent intent) {
+        return !intent.getBooleanExtra(EXTRA_DISABLE_BOOKMARKS_BUTTON, false);
+    }
+
+    /**
+     * @return Whether the download button is enabled.
+     * @see CustomTabsIntent#EXTRA_DISABLE_DOWNLOAD_BUTTON
+     */
+    public static boolean isDownloadButtonEnabled(@NonNull Intent intent) {
+        return !intent.getBooleanExtra(EXTRA_DISABLE_DOWNLOAD_BUTTON, false);
+    }
+
+    /**
+     * @return Whether initial urls are to be sent to external handler apps.
+     * @see CustomTabsIntent#EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER
+     */
+    public static boolean isSendToExternalDefaultHandlerEnabled(@NonNull Intent intent) {
+        return intent.getBooleanExtra(EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER, false);
+    }
+
+    /**
+     * Gets the target language for the Translate UI.
+     *
+     * @return The target language the Translate UI should be triggered with.
+     * @see CustomTabsIntent#EXTRA_TRANSLATE_LANGUAGE
+     */
+    @Nullable
+    public static String getTranslateLanguage(@NonNull Intent intent) {
+        return intent.getStringExtra(EXTRA_TRANSLATE_LANGUAGE);
+    }
+
+    /**
+     * @return Whether the background interaction is enabled.
+     * @see CustomTabsIntent#EXTRA_ENABLE_BACKGROUND_INTERACTION
+     */
+    public static boolean isBackgroundInteractionEnabled(@NonNull Intent intent) {
+        return intent.getBooleanExtra(EXTRA_ENABLE_BACKGROUND_INTERACTION, false);
+    }
+
+    /**
+     * @return Whether the additional actions can be added to the toolbar.
+     * @see CustomTabsIntent#EXTRA_SHOW_ON_TOOLBAR
+     */
+    public static boolean isShowOnToolbarEnabled(@NonNull Intent intent) {
+        return intent.getBooleanExtra(EXTRA_SHOW_ON_TOOLBAR, false);
+    }
+
     @RequiresApi(api = Build.VERSION_CODES.N)
     private static class Api24Impl {
         @DoNotInline
diff --git a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
index 1bba7b6..9997f73 100644
--- a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
+++ b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
@@ -538,6 +538,85 @@
                 intent.getBundleExtra(Browser.EXTRA_HEADERS).getString(ACCEPT_LANGUAGE));
     }
 
+    @Test
+    public void testBookmarksButton() {
+        Intent intent = new CustomTabsIntent.Builder().build().intent;
+        assertTrue(CustomTabsIntent.isBookmarksButtonEnabled(intent));
+
+        intent = new CustomTabsIntent.Builder().setBookmarksButtonEnabled(true).build().intent;
+        assertTrue(CustomTabsIntent.isBookmarksButtonEnabled(intent));
+
+        // Disabled only when explicitly called to disable it.
+        intent = new CustomTabsIntent.Builder().setBookmarksButtonEnabled(false).build().intent;
+        assertFalse(CustomTabsIntent.isBookmarksButtonEnabled(intent));
+    }
+
+    @Test
+    public void testDownloadButton() {
+        Intent intent = new CustomTabsIntent.Builder().build().intent;
+        assertTrue(CustomTabsIntent.isDownloadButtonEnabled(intent));
+
+        intent = new CustomTabsIntent.Builder().setDownloadButtonEnabled(true).build().intent;
+        assertTrue(CustomTabsIntent.isDownloadButtonEnabled(intent));
+
+        // Disabled only when explicitly called to disable it.
+        intent = new CustomTabsIntent.Builder().setDownloadButtonEnabled(false).build().intent;
+        assertFalse(CustomTabsIntent.isDownloadButtonEnabled(intent));
+    }
+
+    @Test
+    public void testSendToExternalDefaultHandler() {
+        Intent intent = new CustomTabsIntent.Builder().build().intent;
+        assertFalse(CustomTabsIntent.isSendToExternalDefaultHandlerEnabled(intent));
+
+        intent = new CustomTabsIntent.Builder()
+                .setSendToExternalDefaultHandlerEnabled(false).build().intent;
+        assertFalse(CustomTabsIntent.isSendToExternalDefaultHandlerEnabled(intent));
+
+        // The extra is set to true only when explicitly called to enable it.
+        intent = new CustomTabsIntent.Builder()
+                .setSendToExternalDefaultHandlerEnabled(true).build().intent;
+        assertTrue(CustomTabsIntent.isSendToExternalDefaultHandlerEnabled(intent));
+    }
+
+    @Config(minSdk = Build.VERSION_CODES.N)
+    @Test
+    public void testBackgroundInteraction() {
+        Intent intent = new CustomTabsIntent.Builder().build().intent;
+        assertFalse(CustomTabsIntent.isBackgroundInteractionEnabled(intent));
+
+        intent = new CustomTabsIntent.Builder()
+                .setBackgroundInteractionEnabled(false).build().intent;
+        assertFalse(CustomTabsIntent.isBackgroundInteractionEnabled(intent));
+
+        // The extra is set to true only when explicitly called to enable it.
+        intent = new CustomTabsIntent.Builder()
+                .setBackgroundInteractionEnabled(true).build().intent;
+        assertTrue(CustomTabsIntent.isBackgroundInteractionEnabled(intent));
+    }
+
+    @Test
+    public void testShowOnToolbar() {
+        Intent intent = new CustomTabsIntent.Builder().build().intent;
+        assertFalse(CustomTabsIntent.isShowOnToolbarEnabled(intent));
+
+        intent = new CustomTabsIntent.Builder().setShowOnToolbarEnabled(false).build().intent;
+        assertFalse(CustomTabsIntent.isShowOnToolbarEnabled(intent));
+
+        // The extra is set to true only when explicitly called to enable it.
+        intent = new CustomTabsIntent.Builder().setShowOnToolbarEnabled(true).build().intent;
+        assertTrue(CustomTabsIntent.isShowOnToolbarEnabled(intent));
+    }
+
+    @Test
+    public void testTranslateLanguage() {
+        Intent intent = new CustomTabsIntent.Builder().build().intent;
+        assertNull(CustomTabsIntent.getTranslateLanguage(intent));
+
+        intent = new CustomTabsIntent.Builder().setTranslateLanguage("fr").build().intent;
+        assertEquals("fr", CustomTabsIntent.getTranslateLanguage(intent));
+    }
+
     private void assertNullSessionInExtras(Intent intent) {
         assertTrue(intent.hasExtra(CustomTabsIntent.EXTRA_SESSION));
         assertNull(intent.getExtras().getBinder(CustomTabsIntent.EXTRA_SESSION));
diff --git a/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt b/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
index 8d92531..05105a0 100644
--- a/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
+++ b/buildSrc-tests/src/test/java/androidx/build/testConfiguration/AndroidTestConfigBuilderTest.kt
@@ -351,6 +351,7 @@
     <option name="instrumentation-arg" key="notAnnotation" value="androidx.test.filters.FlakyTest" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.InstrumentationResultsRunListener" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.SideEffectRunListener" />
+    <option name="instrumentation-arg" key="androidx.benchmark.profiling.mode" value="MethodTracing" />
     <include name="google/unbundled/common/setup" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
     <option name="cleanup-apks" value="true" />
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
index 1eb55ec..8380456 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -363,8 +363,7 @@
         // Explicitly disable StopShip check (see b/244617216)
         disable.add("StopShip")
 
-        // Broken in 7.0.0-alpha15 due to b/180408990
-        disable.add("RestrictedApi")
+        fatal.add("RestrictedApi")
 
         // Disable until ag/19949626 goes in (b/261918265)
         disable.add("MissingQuantity")
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
index 734ece9..0098160 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiLocation.kt
@@ -51,8 +51,6 @@
     val restrictedApiFile: File,
     // File where the library's public resources are recorded
     val resourceFile: File,
-    // Directory where native API files are stored
-    val nativeApiDirectory: File,
     // Directory where the library's stable AIDL surface is recorded
     val aidlApiDirectory: File,
     // File where the API version history is recorded, for use in docs
@@ -95,7 +93,6 @@
                 removedApiFile = File(apiFileDir, "$PREFIX_REMOVED$baseName$EXTENSION"),
                 restrictedApiFile = File(apiFileDir, "$PREFIX_RESTRICTED$baseName$EXTENSION"),
                 resourceFile = File(apiFileDir, "$PREFIX_RESOURCE$baseName$EXTENSION"),
-                nativeApiDirectory = File(apiFileDir, NATIVE_API_DIRECTORY_NAME).resolve(baseName),
                 aidlApiDirectory = File(apiFileDir, AIDL_API_DIRECTORY_NAME).resolve(baseName),
                 apiLevelsFile = File(apiFileDir, API_LEVELS)
             )
@@ -116,9 +113,6 @@
         /** Prefix used for resource-type API files. */
         private const val PREFIX_RESOURCE = "res-"
 
-        /** Directory name for location of native API files */
-        private const val NATIVE_API_DIRECTORY_NAME = "native"
-
         /** Directory name for location of AIDL API files */
         private const val AIDL_API_DIRECTORY_NAME = "aidl"
 
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
index a05104f..9e3f7cc 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/checkapi/ApiTasks.kt
@@ -17,13 +17,11 @@
 package androidx.build.checkapi
 
 import androidx.build.AndroidXExtension
-import androidx.build.LibraryType
 import androidx.build.Release
 import androidx.build.RunApiTasks
 import androidx.build.Version
 import androidx.build.isWriteVersionedApiFilesEnabled
 import androidx.build.java.JavaCompileInputs
-import androidx.build.libabigail.NativeApiTasks
 import androidx.build.metalava.MetalavaTasks
 import androidx.build.resources.ResourceTasks
 import androidx.build.stableaidl.setupWithStableAidlPlugin
@@ -200,14 +198,6 @@
             outputApiLocations
         )
 
-        if (extension.type == LibraryType.PUBLISHED_NATIVE_LIBRARY) {
-            NativeApiTasks.setupProject(
-                project = project,
-                builtApiLocation = builtApiLocation.nativeApiDirectory,
-                outputApiLocations = outputApiLocations.map { it.nativeApiDirectory }
-            )
-        }
-
         project.setupWithStableAidlPlugin()
 
         if (config is LibraryApiTaskConfig) {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiCompatibilityTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiCompatibilityTask.kt
deleted file mode 100644
index 178b2f6..0000000
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiCompatibilityTask.kt
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * 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.build.libabigail
-
-import androidx.build.OperatingSystem
-import androidx.build.getOperatingSystem
-import java.io.ByteArrayOutputStream
-import java.io.File
-import javax.inject.Inject
-import org.gradle.api.DefaultTask
-import org.gradle.api.provider.ListProperty
-import org.gradle.api.provider.Property
-import org.gradle.api.tasks.CacheableTask
-import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.InputFiles
-import org.gradle.api.tasks.Internal
-import org.gradle.api.tasks.OutputFiles
-import org.gradle.api.tasks.PathSensitive
-import org.gradle.api.tasks.PathSensitivity
-import org.gradle.api.tasks.TaskAction
-import org.gradle.process.ExecOperations
-import org.gradle.workers.WorkAction
-import org.gradle.workers.WorkParameters
-import org.gradle.workers.WorkerExecutionException
-import org.gradle.workers.WorkerExecutor
-
-/**
- * Task which depends on [GenerateNativeApiTask] and compares the current native API from the build
- * directory to that stored under /native-api using abidiff. Throws an [AbiDiffException] if the API
- * has incompatible changes.
- */
-@CacheableTask
-abstract class CheckNativeApiCompatibilityTask : DefaultTask() {
-
-    @get:Inject abstract val workerExecutor: WorkerExecutor
-
-    @get:Internal abstract val artifactNames: ListProperty<String>
-
-    @get:Internal abstract val builtApiLocation: Property<File>
-
-    @get:Internal abstract val currentApiLocation: Property<File>
-
-    @get:Input abstract val strict: Property<Boolean>
-
-    @[InputFiles PathSensitive(PathSensitivity.RELATIVE)]
-    fun getTaskInputs(): List<File> {
-        return getLocationsForArtifacts(builtApiLocation.get(), artifactNames.get())
-    }
-
-    @OutputFiles
-    fun getTaskOutputs(): List<File> {
-        return getLocationsForArtifacts(currentApiLocation.get(), artifactNames.get())
-    }
-
-    @TaskAction
-    fun exec() {
-        if (getOperatingSystem() != OperatingSystem.LINUX) {
-            project.logger.warn(
-                "Native API checking is currently not supported on non-linux devices"
-            )
-            return
-        }
-        val builtApiFiles = builtApiLocation.get().walk().toList()
-        val currentApiFiles = currentApiLocation.get().walk().toList()
-
-        // Unless this is the first time we've generated these files, a difference in the number of
-        // API files indicates that a library has been added / removed and the API has changed.
-        if (currentApiFiles.isNotEmpty() && builtApiFiles.size != currentApiFiles.size) {
-            throw AbiDiffException(
-                "Number of built artifacts has changed, expected " +
-                    "${currentApiFiles.size} but was ${builtApiFiles.size}"
-            )
-        }
-        val workQueue = workerExecutor.processIsolation()
-        builtApiLocation.get().listFiles().forEach { archDir ->
-            archDir.listFiles().forEach { apiFile ->
-                workQueue.submit(AbiDiffWorkAction::class.java) { parameters ->
-                    // the current API file of the same name as the one in the built location
-                    parameters.pathToPreviousLib =
-                        currentApiLocation
-                            .get()
-                            .resolve(archDir.name)
-                            .resolve(apiFile.name)
-                            .toString()
-                    // the newly built API file we want to check
-                    parameters.pathToCurrentLib = apiFile.toString()
-                    // necessary to locate `abidiff`
-                    parameters.rootDir = project.rootDir.toString()
-                }
-            }
-        }
-        workQueue.await()
-        logger.info("Native API check succeeded")
-    }
-}
-
-class AbiDiffException(message: String) : WorkerExecutionException(message)
-
-interface AbiDiffParameters : WorkParameters {
-    var rootDir: String
-    var pathToPreviousLib: String
-    var pathToCurrentLib: String
-}
-
-/**
- * The exit value from `abidiff` is an 8-bit field, the specific bits have meaning.The exit codes we
- * are about are:
- *
- * 0000 (0) -> success 0001 (1) -> tool error 0010 (2) -> user error (bad flags etc) 0100 (4) -> ABI
- * changed 1100 (12) -> ABI changed + incompatible changes
- *
- * Remaining bits unused for now, so we should indeed error if we encounter them until we know their
- * meaning. https://sourceware.org/libabigail/manual/abidiff.html#return-values
- */
-enum class AbiDiffExitCode(val value: Int) {
-    SUCCESS(0),
-    TOOL_ERROR(1),
-    USER_ERROR(2),
-    ABI_CHANGE(4),
-    ABI_INCOMPATIBLE_CHANGE(12),
-    UNKNOWN(-1);
-
-    companion object {
-        fun fromInt(value: Int): AbiDiffExitCode = values().find { it.value == value } ?: UNKNOWN
-    }
-}
-
-abstract class AbiDiffWorkAction @Inject constructor(private val execOperations: ExecOperations) :
-    WorkAction<AbiDiffParameters> {
-    override fun execute() {
-        val outputStream = ByteArrayOutputStream()
-        val result =
-            execOperations.exec {
-                it.executable = LibabigailPaths.Linux.abidiffPath(parameters.rootDir)
-                it.args = listOf(parameters.pathToPreviousLib, parameters.pathToCurrentLib)
-                it.standardOutput = outputStream
-                it.isIgnoreExitValue = true
-            }
-        outputStream.close()
-        val exitValue = result.exitValue
-        val output = outputStream.toString()
-        when (AbiDiffExitCode.fromInt(exitValue)) {
-            AbiDiffExitCode.ABI_INCOMPATIBLE_CHANGE -> {
-                throw AbiDiffException(
-                    "Incompatible API changes found! Please make sure these " +
-                        "are intentional and if so update the API file by " +
-                        "running 'ignoreBreakingChangesAndUpdateNativeApi'\n\n$output"
-                )
-            }
-            AbiDiffExitCode.TOOL_ERROR,
-            AbiDiffExitCode.USER_ERROR,
-            AbiDiffExitCode.UNKNOWN -> {
-                throw AbiDiffException(
-                    "Encountered an error while executing 'abidiff', " +
-                        "this is likely a bug.\n\n$output"
-                )
-            }
-            AbiDiffExitCode.ABI_CHANGE, // non breaking changes are okay
-            AbiDiffExitCode.SUCCESS -> Unit
-        }
-    }
-}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiEquivalenceTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiEquivalenceTask.kt
deleted file mode 100644
index 1750eef..0000000
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/CheckNativeApiEquivalenceTask.kt
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.build.libabigail
-
-import androidx.build.metalava.checkEqual
-import java.io.File
-import org.gradle.api.DefaultTask
-import org.gradle.api.provider.ListProperty
-import org.gradle.api.provider.Property
-import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.InputFiles
-import org.gradle.api.tasks.Internal
-import org.gradle.api.tasks.PathSensitive
-import org.gradle.api.tasks.PathSensitivity
-import org.gradle.api.tasks.TaskAction
-import org.gradle.work.DisableCachingByDefault
-
-/**
- * Checks that the native API files in the build folder are exactly the same as the checked in
- * native API files.
- */
-@DisableCachingByDefault(because = "Doesn't benefit from caching")
-abstract class CheckNativeApiEquivalenceTask : DefaultTask() {
-    /** Api file (in the build dir) to check */
-    @get:Input abstract val builtApi: Property<File>
-
-    /** Api file (in source control) to compare against */
-    @get:Input abstract val checkedInApis: ListProperty<File>
-
-    @get:Internal abstract val artifactNames: ListProperty<String>
-
-    @[InputFiles PathSensitive(PathSensitivity.RELATIVE)]
-    fun getTaskInputs(): List<File> {
-        return getLocationsForArtifacts(builtApi.get(), artifactNames.get()) +
-            checkedInApis.get().flatMap { checkedInApi ->
-                getLocationsForArtifacts(checkedInApi, artifactNames.get())
-            }
-    }
-
-    @TaskAction
-    fun exec() {
-        val builtApiLocation = builtApi.get()
-        for (checkedInApi in checkedInApis.get()) {
-            for (artifactName in artifactNames.get()) {
-                for (arch in architectures) {
-                    checkEqual(
-                        builtApiLocation.resolve("$arch/lib$artifactName.xml"),
-                        checkedInApi.resolve("$arch/lib$artifactName.xml")
-                    )
-                }
-            }
-        }
-    }
-}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/GenerateNativeApiTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/GenerateNativeApiTask.kt
deleted file mode 100644
index b91eadd..0000000
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/GenerateNativeApiTask.kt
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * 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.build.libabigail
-
-import androidx.build.OperatingSystem
-import androidx.build.getOperatingSystem
-import java.io.File
-import javax.inject.Inject
-import org.gradle.api.DefaultTask
-import org.gradle.api.GradleException
-import org.gradle.api.file.DirectoryProperty
-import org.gradle.api.provider.ListProperty
-import org.gradle.api.provider.Property
-import org.gradle.api.tasks.CacheableTask
-import org.gradle.api.tasks.InputDirectory
-import org.gradle.api.tasks.Internal
-import org.gradle.api.tasks.OutputFiles
-import org.gradle.api.tasks.PathSensitive
-import org.gradle.api.tasks.PathSensitivity
-import org.gradle.api.tasks.TaskAction
-import org.gradle.process.ExecOperations
-import org.gradle.workers.WorkAction
-import org.gradle.workers.WorkParameters
-import org.gradle.workers.WorkerExecutor
-
-private const val ARCH_PREFIX = "android."
-internal val architectures = listOf("arm64-v8a", "armeabi-v7a", "x86", "x86_64")
-
-/**
- * Task which generates native APIs files for each library built by the 'buildCmakeDebug' task using
- * `abidw` and stores them in the /native-api in the project build directory.
- */
-@CacheableTask
-abstract class GenerateNativeApiTask : DefaultTask() {
-
-    @get:Inject abstract val workerExecutor: WorkerExecutor
-
-    @get:[InputDirectory PathSensitive(PathSensitivity.RELATIVE)]
-    abstract val prefabDirectory: DirectoryProperty
-
-    @get:Internal abstract val projectRootDir: Property<File>
-
-    @get:Internal abstract val apiLocation: Property<File>
-
-    @get:Internal abstract val artifactNames: ListProperty<String>
-
-    @OutputFiles
-    fun getTaskOutputs(): List<File> {
-        return getLocationsForArtifacts(apiLocation.get(), artifactNames.get())
-    }
-
-    @TaskAction
-    fun exec() {
-        if (getOperatingSystem() != OperatingSystem.LINUX) {
-            logger.warn("Native API checking is currently not supported on non-linux devices")
-            return
-        }
-        val destinationDir = apiLocation.get()
-        if (!destinationDir.exists()) {
-            destinationDir.mkdirs()
-        } else {
-            destinationDir.deleteRecursively()
-            destinationDir.mkdirs()
-        }
-        val prefabDir = prefabDirectory.get().asFile
-        val workQueue = workerExecutor.processIsolation()
-        artifactNames.get().forEach { moduleName ->
-            val module = prefabDir.resolve("modules/$moduleName/libs")
-            if (!module.exists()) {
-                throw GradleException(
-                    "Expected prefab directory to include path $module, but it does not exist. " +
-                        "Check value of 'prefab.$moduleName.name' configuration in build.gradle."
-                )
-            }
-            module.listFiles().forEach { archDir ->
-                val artifacts =
-                    archDir.listFiles().filter {
-                        // skip abi.json
-                        it.extension == "a" || it.extension == "so"
-                    }
-                val nameCounts = artifacts.groupingBy { it.nameWithoutExtension }.eachCount()
-                nameCounts.forEach { (name, count) ->
-                    if (count > 1) {
-                        throw GradleException(
-                            "Found multiple artifacts in $archDir with name '$name'"
-                        )
-                    }
-                }
-                artifacts.forEach { artifact ->
-                    val arch = archDir.name.removePrefix(ARCH_PREFIX)
-                    val outputFilePath =
-                        getLocationForArtifact(destinationDir, arch, artifact.nameWithoutExtension)
-                    outputFilePath.parentFile.mkdirs()
-                    workQueue.submit(AbiDwWorkAction::class.java) { parameters ->
-                        parameters.rootDir = projectRootDir.get().toString()
-                        parameters.pathToLib = artifact.canonicalPath
-                        parameters.outputFilePath = outputFilePath.toString()
-                    }
-                }
-            }
-        }
-    }
-}
-
-interface AbiDwParameters : WorkParameters {
-    var rootDir: String
-    var pathToLib: String
-    var outputFilePath: String
-}
-
-abstract class AbiDwWorkAction @Inject constructor(private val execOperations: ExecOperations) :
-    WorkAction<AbiDwParameters> {
-    override fun execute() {
-        val tempFile = File.createTempFile("abi", null)
-        execOperations.exec {
-            it.executable = LibabigailPaths.Linux.abidwPath(parameters.rootDir)
-            it.args =
-                listOf(
-                    "--drop-private-types",
-                    "--no-show-locs",
-                    "--short-locs",
-                    "--no-comp-dir-path",
-                    "--no-corpus-path",
-                    "--out-file",
-                    tempFile.toString(),
-                    parameters.pathToLib
-                )
-        }
-        execOperations.exec {
-            it.executable = LibabigailPaths.Linux.abitidyPath(parameters.rootDir)
-            it.args =
-                listOf(
-                    "--input",
-                    tempFile.toString(),
-                    "--output",
-                    parameters.outputFilePath,
-                    "--abort-on-untyped-symbols",
-                    "--eliminate-duplicates",
-                    "--sort",
-                    "--prune-unreachable"
-                )
-        }
-    }
-}
-
-internal fun getLocationsForArtifacts(baseDir: File, artifactNames: List<String>): List<File> {
-    return artifactNames.flatMap { artifactName ->
-        architectures.map { arch -> getLocationForArtifact(baseDir, arch, artifactName) }
-    }
-}
-
-/**
- * Takes an [archName] and [artifactName] and returns the location within the build folder where
- * that artifacts xml representation should be stored.
- */
-private fun getLocationForArtifact(baseDir: File, archName: String, artifactName: String): File =
-    baseDir.resolve("$archName/$artifactName.xml")
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/LibabigailPaths.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/LibabigailPaths.kt
deleted file mode 100644
index cc45d71..0000000
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/LibabigailPaths.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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.build.libabigail
-
-/** Locations of libabigail libraries (`abidw`, `abidff`) relative to the root project path. */
-object LibabigailPaths {
-    object Linux {
-        private fun basePath(rootDir: String) =
-            "$rootDir/../../prebuilts/fullsdk-linux/kernel-build-tools/linux-x86/bin"
-
-        fun abidwPath(rootDir: String) = "${basePath(rootDir)}/abidw"
-
-        fun abidiffPath(rootDir: String) = "${basePath(rootDir)}/abidiff"
-
-        fun abitidyPath(rootDir: String) = "${basePath(rootDir)}/abitidy"
-    }
-}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/NativeApiTasks.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/NativeApiTasks.kt
deleted file mode 100644
index c483660..0000000
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/NativeApiTasks.kt
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.build.libabigail
-
-import androidx.build.addToBuildOnServer
-import androidx.build.addToCheckTask
-import androidx.build.checkapi.getRequiredCompatibilityApiLocation
-import androidx.build.uptodatedness.cacheEvenIfNoOutputs
-import com.android.build.gradle.LibraryExtension
-import java.io.File
-import org.gradle.api.Project
-
-/** Adds native API generation / updating / checking tasks to a project. */
-object NativeApiTasks {
-    private const val apiGroup = "API"
-
-    fun setupProject(
-        project: Project,
-        builtApiLocation: File,
-        outputApiLocations: List<File>,
-    ) {
-        val artifactNames =
-            project.extensions
-                .getByType(LibraryExtension::class.java)
-                .prefab
-                .filterNot { it.headerOnly }
-                .map { it.name }
-
-        // Generates API files from source in the build directory
-        val generateNativeApi =
-            project.tasks.register("generateNativeApi", GenerateNativeApiTask::class.java) { task ->
-                task.group = apiGroup
-                task.description = "Generates API files from native source"
-                task.projectRootDir.set(project.rootDir)
-                task.prefabDirectory.set(
-                    project.layout.buildDirectory.dir("intermediates/prefab_package/release/prefab")
-                )
-                task.artifactNames.set(artifactNames)
-                task.apiLocation.set(builtApiLocation)
-                task.dependsOn("prefabReleasePackage")
-            }
-
-        // Checks that there are no breaking changes since the last (non alpha) release
-        val requiredCompatibilityApiLocation = project.getRequiredCompatibilityApiLocation()
-        val checkNativeApiRelease =
-            requiredCompatibilityApiLocation?.let { lastReleasedApiFile ->
-                project.tasks.register(
-                    "checkNativeApiRelease",
-                    CheckNativeApiCompatibilityTask::class.java
-                ) { task ->
-                    task.group = apiGroup
-                    task.description =
-                        "Checks that the API generated from native sources is  " +
-                            "compatible with the last released API file"
-                    task.artifactNames.set(artifactNames)
-                    task.builtApiLocation.set(builtApiLocation)
-                    task.currentApiLocation.set(lastReleasedApiFile.nativeApiDirectory)
-                    // only check for breaking changes here
-                    task.strict.set(false)
-                    task.dependsOn(generateNativeApi)
-                }
-            }
-
-        // Checks that API present in source matches that of the current generated API files
-        val checkNativeApi =
-            project.tasks.register("checkNativeApi", CheckNativeApiEquivalenceTask::class.java) {
-                task ->
-                task.group = apiGroup
-                task.description =
-                    "Checks that the API generated from native sources matches " +
-                        "the checked in API file"
-                task.artifactNames.set(artifactNames)
-                task.builtApi.set(builtApiLocation)
-                task.checkedInApis.set(outputApiLocations)
-                task.cacheEvenIfNoOutputs()
-                // Even if our API files are up to date, we still want to make sure we haven't
-                // made any incompatible changes since last release
-                checkNativeApiRelease?.let { task.dependsOn(it) }
-                task.dependsOn(generateNativeApi)
-            }
-
-        // Update the native API files if there are no breaking changes since the last (non-alpha)
-        // release.
-        project.tasks.register("updateNativeApi", UpdateNativeApi::class.java) { task ->
-            task.group = apiGroup
-            task.description = "Updates the checked in API files to match source code API"
-            task.artifactNames.set(artifactNames)
-            task.inputApiLocation.set(builtApiLocation)
-            task.outputApiLocations.set(outputApiLocations)
-            task.dependsOn(generateNativeApi)
-            // only allow updating the API files if there are no breaking changes from the last
-            // released version. If for whatever reason we need to ignore this, the 'force' property
-            // can be used.
-            checkNativeApiRelease?.let { checkTask ->
-                if (!project.hasProperty("force")) {
-                    task.dependsOn(checkTask)
-                }
-            }
-        }
-
-        project.addToCheckTask(checkNativeApi)
-        project.addToBuildOnServer(checkNativeApi)
-    }
-}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/UpdateNativeApi.kt b/buildSrc/private/src/main/kotlin/androidx/build/libabigail/UpdateNativeApi.kt
deleted file mode 100644
index 0ab9714..0000000
--- a/buildSrc/private/src/main/kotlin/androidx/build/libabigail/UpdateNativeApi.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.build.libabigail
-
-import androidx.build.OperatingSystem
-import androidx.build.getOperatingSystem
-import java.io.File
-import org.gradle.api.DefaultTask
-import org.gradle.api.provider.ListProperty
-import org.gradle.api.provider.Property
-import org.gradle.api.tasks.InputFiles
-import org.gradle.api.tasks.Internal
-import org.gradle.api.tasks.OutputFiles
-import org.gradle.api.tasks.PathSensitive
-import org.gradle.api.tasks.PathSensitivity
-import org.gradle.api.tasks.TaskAction
-import org.gradle.work.DisableCachingByDefault
-
-/**
- * Task which depends on `[GenerateNativeApiTask] and takes the generated native API files from the
- * build directory and copies them to the current /native-api directory.
- */
-@DisableCachingByDefault(because = "Doesn't benefit from caching")
-abstract class UpdateNativeApi : DefaultTask() {
-
-    @get:Internal abstract val artifactNames: ListProperty<String>
-
-    @get:Internal abstract val inputApiLocation: Property<File>
-
-    @get:Internal abstract val outputApiLocations: ListProperty<File>
-
-    @[InputFiles PathSensitive(PathSensitivity.RELATIVE)]
-    fun getTaskInputs(): List<File> {
-        return getLocationsForArtifacts(inputApiLocation.get(), artifactNames.get())
-    }
-
-    @OutputFiles
-    fun getTaskOutputs(): List<File> {
-        return outputApiLocations.get().flatMap { outputApiLocation ->
-            getLocationsForArtifacts(outputApiLocation, artifactNames.get())
-        }
-    }
-
-    @TaskAction
-    fun exec() {
-        if (getOperatingSystem() != OperatingSystem.LINUX) {
-            logger.warn("Native API checking is currently not supported on non-linux devices")
-            return
-        }
-        outputApiLocations.get().forEach { dir -> dir.listFiles()?.forEach { it.delete() } }
-        outputApiLocations.get().forEach { outputLocation ->
-            inputApiLocation.get().copyRecursively(target = outputLocation, overwrite = true)
-        }
-    }
-}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
index 31bba81..762bf96 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
@@ -315,7 +315,6 @@
             "--source-path",
             sourcePaths.filter { it.exists() }.joinToString(File.pathSeparator),
             "--format=v4",
-            "--output-kotlin-nulls=yes",
             "--warnings-as-errors"
         )
 
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
index 90fd4df..159d0c3 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/testConfiguration/AndroidTestConfigBuilder.kt
@@ -325,6 +325,7 @@
     """
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.InstrumentationResultsRunListener" />
     <option name="instrumentation-arg" key="listener" value="androidx.benchmark.junit4.SideEffectRunListener" />
+    <option name="instrumentation-arg" key="androidx.benchmark.profiling.mode" value="MethodTracing" />
 
 """
         .trimIndent()
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt b/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt
index a07ef93..ebf4f53 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/LibraryType.kt
@@ -35,8 +35,7 @@
  * The possible values of LibraryType are as follows: PUBLISHED_LIBRARY: a conventional library,
  * published, sourced, documented, and versioned. PUBLISHED_TEST_LIBRARY: PUBLISHED_LIBRARY, but
  * allows calling @VisibleForTesting API. Used for libraries that allow developers to test code that
- * uses your library. Often provides test fakes. PUBLISHED_NATIVE_LIBRARY: PUBLISHED_LIBRARY, but
- * uses native API tracking instead of Java INTERNAL_TEST_LIBRARY: unpublished, untracked,
+ * uses your library. Often provides test fakes. INTERNAL_TEST_LIBRARY: unpublished, untracked,
  * undocumented. Used in internal tests. Usually contains integration tests, but is _not_ an app.
  * Runs device tests. INTERNAL_HOST_TEST_LIBRARY: as INTERNAL_TEST_LIBRARY, but runs host tests
  * instead. Avoid mixing host tests and device tests in the same library, for performance /
@@ -74,7 +73,6 @@
     companion object {
         val PUBLISHED_LIBRARY = PublishedLibrary()
         val PUBLISHED_TEST_LIBRARY = PublishedTestLibrary()
-        val PUBLISHED_NATIVE_LIBRARY = PublishedNativeLibrary()
         val INTERNAL_TEST_LIBRARY = InternalTestLibrary()
         val INTERNAL_HOST_TEST_LIBRARY = InternalHostTestLibrary()
         val SAMPLES = Samples()
@@ -96,7 +94,6 @@
             mapOf(
                 "PUBLISHED_LIBRARY" to PUBLISHED_LIBRARY,
                 "PUBLISHED_TEST_LIBRARY" to PUBLISHED_TEST_LIBRARY,
-                "PUBLISHED_NATIVE_LIBRARY" to PUBLISHED_NATIVE_LIBRARY,
                 "INTERNAL_TEST_LIBRARY" to INTERNAL_TEST_LIBRARY,
                 "INTERNAL_HOST_TEST_LIBRARY" to INTERNAL_HOST_TEST_LIBRARY,
                 "SAMPLES" to SAMPLES,
@@ -144,8 +141,6 @@
 
     class InternalHostTestLibrary() : InternalLibrary(CompilationTarget.HOST)
 
-    class PublishedNativeLibrary : PublishedLibrary()
-
     class Samples :
         LibraryType(
             publish = Publish.SNAPSHOT_AND_RELEASE,
diff --git a/busytown/androidx_compose_multiplatform.sh b/busytown/androidx_compose_multiplatform.sh
index cd3cca9..d14184c 100755
--- a/busytown/androidx_compose_multiplatform.sh
+++ b/busytown/androidx_compose_multiplatform.sh
@@ -13,6 +13,7 @@
       -Pandroidx.enableComposeCompilerMetrics=true \
       -Pandroidx.enableComposeCompilerReports=true \
       -Pandroidx.constraints=true \
+      --no-daemon \
       --profile \
       compileDebugAndroidTestSources \
       compileDebugSources \
diff --git a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
index a8a9b3a..e631d09 100644
--- a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
+++ b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeMetadata.kt
@@ -144,7 +144,6 @@
 /**
  * Utility class for interacting with objects require specific [TotalCaptureResult] metadata
  */
-@Suppress("SyntheticAccessor") // Using an inline class generates a synthetic constructor
 class FakeFrameInfo(
     override val metadata: FrameMetadata = FakeFrameMetadata(),
     override val requestMetadata: RequestMetadata = FakeRequestMetadata(),
diff --git a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeRequestListener.kt b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeRequestListener.kt
index 41b1c0b..9937711 100644
--- a/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeRequestListener.kt
+++ b/camera/camera-camera2-pipe-testing/src/main/java/androidx/camera/camera2/pipe/testing/FakeRequestListener.kt
@@ -72,7 +72,6 @@
         timestamp: CameraTimestamp
     ) = check(
         _onStartedFlow.tryEmit(
-            @Suppress("SyntheticAccessor")
             OnStarted(requestMetadata, frameNumber, timestamp)
         )
     ) {
@@ -86,7 +85,6 @@
         captureResult: FrameMetadata
     ) = check(
         _onPartialCaptureResultFlow.tryEmit(
-            @Suppress("SyntheticAccessor")
             OnPartialCaptureResult(requestMetadata, frameNumber, captureResult)
         )
     ) {
@@ -100,7 +98,6 @@
         totalCaptureResult: FrameInfo
     ) = check(
         _onTotalCaptureResultFlow.tryEmit(
-            @Suppress("SyntheticAccessor")
             OnTotalCaptureResult(requestMetadata, frameNumber, totalCaptureResult)
         )
     ) {
@@ -114,7 +111,6 @@
         result: FrameInfo
     ) = check(
         _onCompleteFlow.tryEmit(
-            @Suppress("SyntheticAccessor")
             OnComplete(requestMetadata, frameNumber, result)
         )
     ) {
@@ -126,7 +122,6 @@
         request: Request
     ) = check(
         _onAbortedFlow.tryEmit(
-            @Suppress("SyntheticAccessor")
             OnAborted(request)
         )
     ) {
@@ -140,7 +135,6 @@
         stream: StreamId
     ) = check(
         _onBufferLostFlow.tryEmit(
-            @Suppress("SyntheticAccessor")
             OnBufferLost(requestMetadata, frameNumber, stream)
         )
     ) {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
index f94eb82..0607870 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
@@ -65,7 +65,6 @@
         session: CameraCaptureSessionWrapper,
         surfaceMap: Map<StreamId, Surface>
     ): CaptureSequenceProcessor<*, CaptureSequence<Any>> {
-        @Suppress("SyntheticAccessor")
         return Camera2CaptureSequenceProcessor(
             session,
             threads,
@@ -213,7 +212,6 @@
                     captureRequests.addAll(highSpeedRequestList)
                 }
 
-                @Suppress("SyntheticAccessor")
                 val metadata =
                     Camera2RequestMetadata(
                         session,
@@ -231,7 +229,6 @@
             } else {
                 captureRequests.add(captureRequest)
 
-                @Suppress("SyntheticAccessor")
                 val metadata =
                     Camera2RequestMetadata(
                         session,
@@ -250,7 +247,6 @@
         }
 
         // Create the captureSequence listener
-        @Suppress("SyntheticAccessor")
         return Camera2CaptureSequence(
             session.device.cameraId,
             isRepeating,
@@ -447,7 +443,6 @@
 
 /** This class packages together information about a request that was submitted to the camera. */
 @RequiresApi(21)
-@Suppress("SyntheticAccessor") // Using an inline class generates a synthetic constructor
 internal class Camera2RequestMetadata(
     private val cameraCaptureSessionWrapper: CameraCaptureSessionWrapper,
     private val captureRequest: CaptureRequest,
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/FrameMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/FrameMetadata.kt
index efbe87b..59cb260 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/FrameMetadata.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/FrameMetadata.kt
@@ -32,7 +32,6 @@
 import kotlin.reflect.KClass
 
 /** An implementation of [FrameMetadata] that retrieves values from a [CaptureResult] object */
-@Suppress("SyntheticAccessor") // Using an inline class generates a synthetic constructor
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
 internal class AndroidFrameMetadata
 constructor(private val captureResult: CaptureResult, override val camera: CameraId) :
@@ -88,7 +87,6 @@
 }
 
 /** An implementation of [FrameInfo] that retrieves values from a [TotalCaptureResult] object. */
-@Suppress("SyntheticAccessor") // Using an inline class generates a synthetic constructor
 @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
 internal class AndroidFrameInfo(
     private val totalCaptureResult: TotalCaptureResult,
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt
index 456e87f..eb3baea 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCamera.kt
@@ -293,7 +293,7 @@
 
         closeWith(
             device?.unwrapAs(CameraDevice::class),
-            @Suppress("SyntheticAccessor") ClosingInfo(ClosedReason.APP_CLOSED)
+            ClosingInfo(ClosedReason.APP_CLOSED)
         )
     }
 
@@ -380,7 +380,6 @@
 
         closeWith(
             cameraDevice,
-            @Suppress("SyntheticAccessor")
             ClosingInfo(
                 ClosedReason.CAMERA2_DISCONNECTED,
                 errorCode = CameraError.ERROR_CAMERA_DISCONNECTED
@@ -398,7 +397,6 @@
 
         closeWith(
             cameraDevice,
-            @Suppress("SyntheticAccessor")
             ClosingInfo(ClosedReason.CAMERA2_ERROR, errorCode = CameraError.from(errorCode))
         )
         interopDeviceStateCallback?.onError(cameraDevice, errorCode)
@@ -412,7 +410,7 @@
         cameraDeviceClosed.countDown()
 
         closeWith(
-            cameraDevice, @Suppress("SyntheticAccessor") ClosingInfo(ClosedReason.CAMERA2_CLOSED)
+            cameraDevice, ClosingInfo(ClosedReason.CAMERA2_CLOSED)
         )
         interopDeviceStateCallback?.onClosed(cameraDevice)
         Debug.traceStop()
@@ -431,7 +429,6 @@
     private fun closeWith(throwable: Throwable, cameraError: CameraError) {
         closeWith(
             null,
-            @Suppress("SyntheticAccessor")
             ClosingInfo(
                 ClosedReason.CAMERA2_EXCEPTION, errorCode = cameraError, exception = throwable
             )
@@ -495,7 +492,6 @@
 
         val closeDuration = closingTimestamp.let { now - it }
 
-        @Suppress("SyntheticAccessor")
         return CameraStateClosed(
             cameraId,
             cameraClosedReason = closingInfo.reason,
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt
index 8e2ec00..0194989 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt
@@ -118,7 +118,6 @@
                     continue
                 }
 
-                @SuppressWarnings("SyntheticAccessor")
                 val outputConfig =
                     OutputConfig(
                         nextConfigId(),
@@ -153,7 +152,6 @@
                 streamConfig.outputs.map {
                     val outputConfig = outputConfigMap[it]!!
 
-                    @SuppressWarnings("SyntheticAccessor")
                     val outputStream =
                         OutputStreamImpl(
                             nextOutputId(),
@@ -191,7 +189,6 @@
         outputs = sortOutputsByVideoStream(outputsSortedByPreview)
     }
 
-    @Suppress("SyntheticAccessor") // StreamId generates a synthetic constructor
     class OutputConfig(
         val id: OutputConfigId,
         val size: Size,
@@ -215,7 +212,6 @@
         override fun toString(): String = id.toString()
     }
 
-    @Suppress("SyntheticAccessor") // OutputId generates a synthetic constructor
     private class OutputStreamImpl(
         override val id: OutputId,
         override val size: Size,
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/RobolectricCameras.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/RobolectricCameras.kt
index 6769c1b..5cbd01a 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/RobolectricCameras.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/RobolectricCameras.kt
@@ -111,14 +111,13 @@
                 emptySet()
             )
 
-        @Suppress("SyntheticAccessor") val callback = CameraStateCallback(cameraId)
+        val callback = CameraStateCallback(cameraId)
         cameraManager.openCamera(cameraId.value, callback, Handler())
 
         // Wait until the camera is "opened" by robolectric.
         shadowOf(Looper.myLooper()).idle()
         val cameraDevice = callback.camera!!
 
-        @Suppress("SyntheticAccessor")
         return FakeCamera(cameraId, characteristics, metadata, cameraDevice)
     }
 
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
index deede40..ba71d6e 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/CaptureSessionTest.java
@@ -782,17 +782,15 @@
                 mCameraDeviceHolder.get(), mCaptureSessionOpenerBuilder.build());
         assertFutureCompletes(openFuture1, 5, TimeUnit.SECONDS);
 
-
         assertTrue(mTestParameters1.waitForData());
-
         assertThat(captureSession1.getState()).isEqualTo(State.OPENED);
-        assertThat(captureSession0.getState()).isEqualTo(State.RELEASED);
 
         // First session should have StateCallback.onConfigured(), onClosed() calls.
         verify(mTestParameters0.mSessionStateCallback, times(1))
                 .onConfigured(any(CameraCaptureSession.class));
         verify(mTestParameters0.mSessionStateCallback, times(1))
                 .onClosed(any(CameraCaptureSession.class));
+        assertThat(captureSession0.getState()).isEqualTo(State.RELEASED);
 
         // Second session should have StateCallback.onConfigured() call.
         verify(mTestParameters1.mSessionStateCallback, times(1))
diff --git a/camera/camera-core/lint-baseline.xml b/camera/camera-core/lint-baseline.xml
index a52b3a9..771996c 100644
--- a/camera/camera-core/lint-baseline.xml
+++ b/camera/camera-core/lint-baseline.xml
@@ -1,5 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ExifInterface.TAG_THUMBNAIL_ORIENTATION can only be accessed from within the same library (androidx.exifinterface:exifinterface)"
+        errorLine1="            ExifInterface.TAG_THUMBNAIL_ORIENTATION);"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/core/impl/utils/Exif.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExifInterface.TAG_THUMBNAIL_ORIENTATION can only be accessed from within the same library (androidx.exifinterface:exifinterface)"
+        errorLine1="                ExifInterface.TAG_THUMBNAIL_ORIENTATION,"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/core/impl/utils/Exif.java"/>
+    </issue>
 
     <issue
         id="UnsafeOptInUsageError"
diff --git a/camera/camera-effects/build.gradle b/camera/camera-effects/build.gradle
index 858866e..6c618ee 100644
--- a/camera/camera-effects/build.gradle
+++ b/camera/camera-effects/build.gradle
@@ -23,6 +23,16 @@
 }
 dependencies {
     api(project(":camera:camera-core"))
+    implementation(libs.autoValueAnnotations)
+
+    annotationProcessor(libs.autoValue)
+
+    androidTestImplementation(libs.multidex)
+    androidTestImplementation(libs.testExtJunit)
+    androidTestImplementation(libs.testCore)
+    androidTestImplementation(libs.testRunner)
+    androidTestImplementation(libs.testRules)
+    androidTestImplementation(libs.truth)
 }
 android {
     defaultConfig {
diff --git a/camera/camera-effects/src/androidTest/java/androidx/camera/effects/opengl/GlContextDeviceTest.kt b/camera/camera-effects/src/androidTest/java/androidx/camera/effects/opengl/GlContextDeviceTest.kt
new file mode 100644
index 0000000..d6b064d
--- /dev/null
+++ b/camera/camera-effects/src/androidTest/java/androidx/camera/effects/opengl/GlContextDeviceTest.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl
+
+import android.graphics.SurfaceTexture
+import android.view.Surface
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Instrumentation tests for [GlContext].
+ */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 21)
+class GlContextDeviceTest {
+
+    companion object {
+        private const val TIMESTAMP_NS = 0L
+    }
+
+    private val glContext = GlContext()
+
+    private lateinit var surface: Surface
+    private lateinit var surfaceTexture: SurfaceTexture
+
+    @Before
+    fun setUp() {
+        surfaceTexture = SurfaceTexture(0)
+        surface = Surface(surfaceTexture)
+        glContext.init()
+    }
+
+    @After
+    fun tearDown() {
+        glContext.release()
+        surfaceTexture.release()
+        surface.release()
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun drawUnregisteredSurface_throwsException() {
+        glContext.drawAndSwap(surface, TIMESTAMP_NS)
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun unregisterSurfaceAndDraw_throwsException() {
+        glContext.registerSurface(surface)
+        glContext.unregisterSurface(surface)
+        glContext.drawAndSwap(surface, TIMESTAMP_NS)
+    }
+
+    @Test
+    fun drawRegisteredSurface_noException() {
+        glContext.registerSurface(surface)
+        glContext.drawAndSwap(surface, TIMESTAMP_NS)
+    }
+}
diff --git a/camera/camera-effects/src/androidTest/java/androidx/camera/effects/opengl/GlRendererDeviceTest.kt b/camera/camera-effects/src/androidTest/java/androidx/camera/effects/opengl/GlRendererDeviceTest.kt
new file mode 100644
index 0000000..795082f
--- /dev/null
+++ b/camera/camera-effects/src/androidTest/java/androidx/camera/effects/opengl/GlRendererDeviceTest.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Instrumentation tests for [GlRenderer].
+ */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 21)
+class GlRendererDeviceTest {
+
+    private val glRenderer = GlRenderer()
+
+    @Before
+    fun setUp() {
+        glRenderer.init()
+    }
+
+    @After
+    fun tearDown() {
+        glRenderer.release()
+    }
+
+    // TODO(b/295407763): verify the input/output of the OpenGL renderer
+    @Test
+    fun placeholder() {
+        assertThat(true).isTrue()
+    }
+}
diff --git a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/EglSurface.java b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/EglSurface.java
new file mode 100644
index 0000000..e7a39d6
--- /dev/null
+++ b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/EglSurface.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl;
+
+import android.opengl.EGLSurface;
+import android.view.Surface;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.google.auto.value.AutoValue;
+
+/**
+ * A Surface with its corresponding EGLSurface and size.
+ */
+@AutoValue
+abstract class EglSurface {
+
+    @NonNull
+    static EglSurface of(@NonNull EGLSurface eglSurface, @Nullable Surface surface, int width,
+            int height) {
+        return new AutoValue_EglSurface(eglSurface, surface, width, height);
+    }
+
+    /**
+     * {@link EGLSurface} created based on the {@link #getSurface()}. If {@link #getSurface()} is
+     * null, then this value is based on Pbuffer.
+     */
+    @NonNull
+    abstract EGLSurface getEglSurface();
+
+    @Nullable
+    abstract Surface getSurface();
+
+    abstract int getWidth();
+
+    abstract int getHeight();
+}
diff --git a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlContext.java b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlContext.java
new file mode 100644
index 0000000..ee796b3e
--- /dev/null
+++ b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlContext.java
@@ -0,0 +1,315 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl;
+
+import static androidx.camera.effects.opengl.Utils.checkEglErrorOrLog;
+import static androidx.camera.effects.opengl.Utils.checkEglErrorOrThrow;
+import static androidx.camera.effects.opengl.Utils.drawArrays;
+import static androidx.core.util.Preconditions.checkState;
+
+import static java.util.Objects.requireNonNull;
+
+import android.opengl.EGL14;
+import android.opengl.EGLConfig;
+import android.opengl.EGLContext;
+import android.opengl.EGLDisplay;
+import android.opengl.EGLExt;
+import android.opengl.EGLSurface;
+import android.view.Surface;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.Logger;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Manages OpenGL configurations.
+ *
+ * <p>Allows registering and unregistering output Surfaces and manages their corresponding
+ * {@link EGLSurface}.
+ */
+@RequiresApi(21)
+public class GlContext {
+
+    private static final String TAG = "GlContext";
+
+    // EGL setup
+    @Nullable
+    private EGLDisplay mEglDisplay = EGL14.EGL_NO_DISPLAY;
+    @Nullable
+    private EGLContext mEglContext = EGL14.EGL_NO_CONTEXT;
+    @Nullable
+    private EGLConfig mEglConfig = null;
+
+    // Current output Surface being drawn to.
+    @Nullable
+    private EglSurface mCurrentSurface = null;
+    // A temporary output Surface. This is used when no Surface has been registered yet.
+    @Nullable
+    private EglSurface mTempSurface = null;
+    @NonNull
+    private final Map<Surface, EglSurface> mRegisteredSurfaces = new HashMap<>();
+
+    void init() {
+        checkState(Objects.equals(mEglDisplay, EGL14.EGL_NO_DISPLAY), "Already initialized");
+
+        // TODO(b/295407763): make sure EGLDisplay, EGLConfig, and EGLContext are released when
+        //  there is exception.
+        // Create EGLDisplay.
+        EGLDisplay eglDisplay = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
+        if (Objects.equals(eglDisplay, EGL14.EGL_NO_DISPLAY)) {
+            throw new IllegalStateException("Unable to get EGL14 display");
+        }
+        int[] version = new int[2];
+        if (!EGL14.eglInitialize(eglDisplay, version, 0, version, 1)) {
+            throw new IllegalStateException("Unable to initialize EGL14");
+        }
+
+        // Create EGLConfig.
+        int rgbBits = 8;
+        int alphaBits = 8;
+        int renderType = EGL14.EGL_OPENGL_ES2_BIT;
+        int recordableAndroid = EGL14.EGL_TRUE;
+        int[] attribToChooseConfig = {
+                EGL14.EGL_RED_SIZE, rgbBits,
+                EGL14.EGL_GREEN_SIZE, rgbBits,
+                EGL14.EGL_BLUE_SIZE, rgbBits,
+                EGL14.EGL_ALPHA_SIZE, alphaBits,
+                EGL14.EGL_DEPTH_SIZE, 0,
+                EGL14.EGL_STENCIL_SIZE, 0,
+                EGL14.EGL_RENDERABLE_TYPE, renderType,
+                EGLExt.EGL_RECORDABLE_ANDROID, recordableAndroid,
+                EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT | EGL14.EGL_PBUFFER_BIT,
+                EGL14.EGL_NONE
+        };
+        EGLConfig[] configs = new EGLConfig[1];
+        int[] numConfigs = new int[1];
+        if (!EGL14.eglChooseConfig(
+                eglDisplay, attribToChooseConfig, 0, configs, 0, configs.length,
+                numConfigs, 0
+        )) {
+            throw new IllegalStateException("Unable to find a suitable EGLConfig");
+        }
+        EGLConfig eglConfig = configs[0];
+        int[] attribToCreateContext = {
+                EGL14.EGL_CONTEXT_CLIENT_VERSION, 2,
+                EGL14.EGL_NONE
+        };
+
+        // Create EGLContext.
+        EGLContext eglContext = EGL14.eglCreateContext(
+                eglDisplay, eglConfig, EGL14.EGL_NO_CONTEXT,
+                attribToCreateContext, 0
+        );
+        checkEglErrorOrThrow("eglCreateContext");
+        int[] values = new int[1];
+        EGL14.eglQueryContext(
+                eglDisplay, eglContext, EGL14.EGL_CONTEXT_CLIENT_VERSION, values,
+                0
+        );
+        Logger.d(TAG, "EGLContext created, client version " + values[0]);
+
+        // All successful. Track the created objects.
+        mEglDisplay = eglDisplay;
+        mEglConfig = eglConfig;
+        mEglContext = eglContext;
+
+        // Create a temporary surface to make it current.
+        mTempSurface = create1x1PBufferSurface();
+        makeCurrent(mTempSurface);
+    }
+
+    /**
+     * Registers the given {@link Surface} as an output surface.
+     *
+     * <p>Once registered, the corresponding {@link EglSurface} can be used in
+     * {@link #drawAndSwap}.
+     */
+    void registerSurface(@NonNull Surface surface) {
+        checkInitialized();
+        if (!mRegisteredSurfaces.containsKey(surface)) {
+            mRegisteredSurfaces.put(surface, null);
+        }
+    }
+
+    /**
+     * Unregisters the given {@link Surface} as an output surface.
+     *
+     * <p>Once unregistered, calling {@link #drawAndSwap} will no longer be effective.
+     */
+    void unregisterSurface(@NonNull Surface surface) {
+        checkInitialized();
+        if (requireNonNull(mCurrentSurface).getSurface() == surface) {
+            // If the current surface is being unregistered, switch to the temporary surface.
+            makeCurrent(requireNonNull(mTempSurface));
+        }
+        // Destroy the EGLSurface.
+        EglSurface removedSurface = mRegisteredSurfaces.remove(surface);
+        if (removedSurface != null) {
+            destroyEglSurface(removedSurface);
+        }
+    }
+
+    /**
+     * Draws the current bound texture to the given {@link Surface}.
+     *
+     * <p>No-ops if the given {@link Surface} is not registered.
+     *
+     * @param timestampNs The timestamp of the frame in nanoseconds.
+     */
+    void drawAndSwap(@NonNull Surface surface, long timestampNs) {
+        checkInitialized();
+        checkState(mRegisteredSurfaces.containsKey(surface), "The Surface is not registered.");
+
+        // Get or create the EGLSurface.
+        EglSurface eglSurface = mRegisteredSurfaces.get(surface);
+        // Workaround for when the output Surface is failed to create or needs to be recreated.
+        if (eglSurface == null) {
+            eglSurface = createEglSurface(surface);
+            if (eglSurface == null) {
+                Logger.w(TAG, "Failed to create EGLSurface. Skip drawing.");
+                return;
+            }
+            mRegisteredSurfaces.put(surface, eglSurface);
+        }
+
+        // Draw.
+        makeCurrent(eglSurface);
+        drawArrays(eglSurface.getWidth(), eglSurface.getHeight());
+        EGLExt.eglPresentationTimeANDROID(mEglDisplay, eglSurface.getEglSurface(), timestampNs);
+
+        // Swap buffer
+        if (!EGL14.eglSwapBuffers(mEglDisplay, eglSurface.getEglSurface())) {
+            // If swap buffer failed, destroy the invalid EGL Surface.
+            Logger.w(TAG, "Failed to swap buffers with EGL error: 0x" + Integer.toHexString(
+                    EGL14.eglGetError()));
+            unregisterSurface(surface);
+            // Add the surface back since it's still registered.
+            mRegisteredSurfaces.put(surface, null);
+        }
+    }
+
+    boolean release() {
+        if (!isInitialized()) {
+            return false;
+        }
+        EGL14.eglMakeCurrent(
+                mEglDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE,
+                EGL14.EGL_NO_CONTEXT
+        );
+
+        // Destroy EGLSurfaces
+        for (EglSurface eglSurface : mRegisteredSurfaces.values()) {
+            destroyEglSurface(eglSurface);
+        }
+        mRegisteredSurfaces.clear();
+
+        // Destroy the temporary surface.
+        if (mTempSurface != null) {
+            destroyEglSurface(mTempSurface);
+            mTempSurface = null;
+        }
+        mCurrentSurface = null;
+
+        // Destroy EGLContext and terminate display.
+        EGL14.eglDestroyContext(mEglDisplay, mEglContext);
+        EGL14.eglTerminate(mEglDisplay);
+        EGL14.eglReleaseThread();
+
+        // Clear the created configurations.
+        mEglDisplay = EGL14.EGL_NO_DISPLAY;
+        mEglContext = EGL14.EGL_NO_CONTEXT;
+        mEglConfig = null;
+        return true;
+    }
+
+    // --- Private methods ---
+
+    private void destroyEglSurface(@NonNull EglSurface eglSurface) {
+        if (!EGL14.eglDestroySurface(mEglDisplay, eglSurface.getEglSurface())) {
+            checkEglErrorOrLog("eglDestroySurface");
+        }
+    }
+
+    @Nullable
+    private EglSurface createEglSurface(@NonNull Surface surface) {
+        EGLSurface eglSurface;
+        try {
+            int[] surfaceAttrib = {
+                    EGL14.EGL_NONE
+            };
+            eglSurface = EGL14.eglCreateWindowSurface(
+                    mEglDisplay, mEglConfig, surface, surfaceAttrib, 0);
+            checkEglErrorOrThrow("eglCreateWindowSurface");
+        } catch (IllegalStateException | IllegalArgumentException e) {
+            Logger.w(TAG, "Failed to create EGL surface: " + e.getMessage(), e);
+            return null;
+        }
+        int width = querySurface(eglSurface, EGL14.EGL_WIDTH);
+        int height = querySurface(eglSurface, EGL14.EGL_HEIGHT);
+        return EglSurface.of(eglSurface, surface, width, height);
+    }
+
+    private int querySurface(@NonNull EGLSurface eglSurface, int what) {
+        int[] value = new int[1];
+        EGL14.eglQuerySurface(mEglDisplay, eglSurface, what, value, 0);
+        return value[0];
+    }
+
+    private void makeCurrent(@NonNull EglSurface eglSurface) {
+        checkInitialized();
+        if (!EGL14.eglMakeCurrent(mEglDisplay, eglSurface.getEglSurface(),
+                eglSurface.getEglSurface(),
+                mEglContext)) {
+            throw new IllegalStateException("eglMakeCurrent failed");
+        }
+
+        mCurrentSurface = eglSurface;
+    }
+
+    private void checkInitialized() {
+        checkState(isInitialized(), "GlContext is not initialized");
+    }
+
+    private boolean isInitialized() {
+        return !Objects.equals(mEglDisplay, EGL14.EGL_NO_DISPLAY)
+                && !Objects.equals(mEglContext, EGL14.EGL_NO_CONTEXT)
+                && mEglConfig != null;
+    }
+
+    private EglSurface create1x1PBufferSurface() {
+        int width = 1;
+        int height = 1;
+        int[] surfaceAttrib = {
+                EGL14.EGL_WIDTH, width,
+                EGL14.EGL_HEIGHT, height,
+                EGL14.EGL_NONE
+        };
+        EGLSurface eglSurface = EGL14.eglCreatePbufferSurface(mEglDisplay, mEglConfig,
+                surfaceAttrib, 0
+        );
+        checkEglErrorOrThrow("eglCreatePbufferSurface");
+        if (eglSurface == null) {
+            throw new IllegalStateException("surface was null");
+        }
+        return EglSurface.of(eglSurface, null, width, height);
+    }
+}
diff --git a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgram.java b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgram.java
new file mode 100644
index 0000000..242536f1
--- /dev/null
+++ b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgram.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl;
+
+import static androidx.camera.effects.opengl.Utils.checkGlErrorOrThrow;
+import static androidx.camera.effects.opengl.Utils.checkLocationOrThrow;
+import static androidx.camera.effects.opengl.Utils.createFloatBuffer;
+import static androidx.core.util.Preconditions.checkState;
+
+import android.opengl.GLES20;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.Logger;
+
+import java.nio.FloatBuffer;
+
+/**
+ * A base class that represents an OpenGL program.
+ */
+@RequiresApi(21)
+public abstract class GlProgram {
+
+    private static final String TAG = "GlProgram";
+
+    static final String POSITION_ATTRIBUTE = "aPosition";
+    static final String TEXTURE_ATTRIBUTE = "aTextureCoord";
+    static final String TEXTURE_COORDINATES = "vTextureCoord";
+    static final String INPUT_SAMPLER = "samplerInputTexture";
+
+    // Used with {@Link #POSITION_ATTRIBUTE}
+    private static final FloatBuffer VERTEX_BUFFER = createFloatBuffer(new float[]{
+            -1.0f, -1.0f, // 0 bottom left
+            1.0f, -1.0f, // 1 bottom right
+            -1.0f, 1.0f, // 2 top left
+            1.0f, 1.0f   // 3 top right
+    });
+
+    // Used with {@Link #TEXTURE_ATTRIBUTE}
+    private static final FloatBuffer TEXTURE_BUFFER = createFloatBuffer(new float[]{
+            0.0f, 0.0f, // 0 bottom left
+            1.0f, 0.0f, // 1 bottom right
+            0.0f, 1.0f, // 2 top left
+            1.0f, 1.0f  // 3 top right
+    });
+
+    // The size of VERTEX_BUFFER and TEXTURE_BUFFER.
+    static final int VERTEX_SIZE = 4;
+
+    int mProgramHandle = -1;
+
+    private final String mVertexShader;
+    private final String mFragmentShader;
+
+    GlProgram(@NonNull String vertexShader, @NonNull String programShader) {
+        mVertexShader = vertexShader;
+        mFragmentShader = programShader;
+    }
+
+    /**
+     * Initializes this program.
+     */
+    void init() {
+        checkState(!isInitialized(), "Program already initialized.");
+        mProgramHandle = createProgram(mVertexShader, mFragmentShader);
+        use();
+        configure();
+    }
+
+    /**
+     * Configures this program.
+     *
+     * <p>This base method configures attributes that are common to all programs. Each subclass
+     * should override this method to add its own attributes.
+     */
+    @CallSuper
+    protected void configure() {
+        checkInitialized();
+
+        // Configure the vertex of the 3D object (a quadrilateral).
+        int positionLoc = GLES20.glGetAttribLocation(mProgramHandle, POSITION_ATTRIBUTE);
+        checkLocationOrThrow(positionLoc, POSITION_ATTRIBUTE);
+        GLES20.glEnableVertexAttribArray(positionLoc);
+        checkGlErrorOrThrow("glEnableVertexAttribArray");
+        int coordsPerVertex = 2;
+        int vertexStride = 0;
+        GLES20.glVertexAttribPointer(positionLoc, coordsPerVertex, GLES20.GL_FLOAT, false,
+                vertexStride, VERTEX_BUFFER);
+        checkGlErrorOrThrow("glVertexAttribPointer");
+
+        // Configure the coordinate of the texture.
+        int texCoordLoc = GLES20.glGetAttribLocation(mProgramHandle, TEXTURE_ATTRIBUTE);
+        checkLocationOrThrow(texCoordLoc, TEXTURE_ATTRIBUTE);
+        GLES20.glEnableVertexAttribArray(texCoordLoc);
+        checkGlErrorOrThrow("glEnableVertexAttribArray");
+        int coordsPerTex = 2;
+        int texStride = 0;
+        GLES20.glVertexAttribPointer(texCoordLoc, coordsPerTex, GLES20.GL_FLOAT, false,
+                texStride, TEXTURE_BUFFER);
+        checkGlErrorOrThrow("glVertexAttribPointer");
+    }
+
+    /**
+     * Uses this program.
+     */
+    @CallSuper
+    protected final void use() {
+        checkInitialized();
+        GLES20.glUseProgram(mProgramHandle);
+        checkGlErrorOrThrow("glUseProgram");
+    }
+
+    /**
+     * Deletes this program and clears the state.
+     *
+     * <p>Subclasses should override this method to delete their own resources.
+     */
+    @CallSuper
+    protected void release() {
+        if (isInitialized()) {
+            GLES20.glDeleteProgram(mProgramHandle);
+            checkGlErrorOrThrow("glDeleteProgram");
+            mProgramHandle = -1;
+        }
+    }
+
+    private void checkInitialized() {
+        checkState(isInitialized(), "Program not initialized");
+    }
+
+    private boolean isInitialized() {
+        return mProgramHandle != -1;
+    }
+
+    private int createProgram(String vertexShaderStr, String fragmentShaderStr) {
+        int vertexShader = -1, fragmentShader = -1, program = -1;
+        try {
+            program = GLES20.glCreateProgram();
+            checkGlErrorOrThrow("glCreateProgram");
+
+            vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderStr);
+            GLES20.glAttachShader(program, vertexShader);
+            checkGlErrorOrThrow("glAttachShader");
+
+            fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderStr);
+            GLES20.glAttachShader(program, fragmentShader);
+            checkGlErrorOrThrow("glAttachShader");
+
+            GLES20.glLinkProgram(program);
+            int[] linkStatus = new int[1];
+            GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
+            if (linkStatus[0] != GLES20.GL_TRUE) {
+                throw new IllegalStateException(
+                        "Could not link program: " + GLES20.glGetProgramInfoLog(program));
+            }
+            return program;
+        } catch (IllegalStateException | IllegalArgumentException e) {
+            if (vertexShader != -1) {
+                GLES20.glDeleteShader(vertexShader);
+            }
+            if (fragmentShader != -1) {
+                GLES20.glDeleteShader(fragmentShader);
+            }
+            if (program != -1) {
+                GLES20.glDeleteProgram(program);
+            }
+            throw e;
+        }
+    }
+
+    private int loadShader(int shaderType, String source) {
+        int shader = GLES20.glCreateShader(shaderType);
+        checkGlErrorOrThrow("glCreateShader type=" + shaderType);
+        GLES20.glShaderSource(shader, source);
+        GLES20.glCompileShader(shader);
+        int[] compiled = new int[1];
+        GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
+        if (compiled[0] == 0) {
+            Logger.w(TAG, "Could not compile shader: " + source);
+            GLES20.glDeleteShader(shader);
+            throw new IllegalStateException(
+                    "Could not compile shader type " + shaderType + ":" + GLES20.glGetShaderInfoLog(
+                            shader)
+            );
+        }
+        return shader;
+    }
+}
diff --git a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgramCopy.java b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgramCopy.java
new file mode 100644
index 0000000..5114b56
--- /dev/null
+++ b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgramCopy.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl;
+
+import static androidx.camera.effects.opengl.Utils.checkGlErrorOrThrow;
+import static androidx.camera.effects.opengl.Utils.drawArrays;
+
+import android.opengl.GLES11Ext;
+import android.opengl.GLES20;
+
+import androidx.annotation.RequiresApi;
+
+/**
+ * A GL program that copies the input texture to the given 2D texture.
+ *
+ * <p>It assumes that the output texture has the same size as the input, so no transformation
+ * needed.
+ */
+@RequiresApi(21)
+class GlProgramCopy extends GlProgram {
+
+    private static final String VERTEX_SHADER = "attribute vec4 " + POSITION_ATTRIBUTE + ";\n"
+            + "attribute vec4 " + TEXTURE_ATTRIBUTE + ";\n"
+            + "varying vec2 " + TEXTURE_COORDINATES + ";\n"
+            + "void main() {\n"
+            + "    gl_Position = " + POSITION_ATTRIBUTE + ";\n"
+            + "    " + TEXTURE_COORDINATES + "= " + TEXTURE_ATTRIBUTE + ".xy;\n"
+            + "}";
+
+    private static final String FRAGMENT_SHADER = "#extension GL_OES_EGL_image_external : require\n"
+            + "precision mediump float;\n"
+            + "varying vec2 " + TEXTURE_COORDINATES + ";\n"
+            + "uniform samplerExternalOES " + INPUT_SAMPLER + ";\n"
+            + "void main() {\n"
+            + "    gl_FragColor = texture2D(" + INPUT_SAMPLER + ", "
+            + TEXTURE_COORDINATES + ");\n"
+            + "}";
+
+    // A FBO object for attaching the output texture.
+    private int mFbo = -1;
+
+    GlProgramCopy() {
+        super(VERTEX_SHADER, FRAGMENT_SHADER);
+    }
+
+    @Override
+    protected void configure() {
+        super.configure();
+        // Create a FBO for attaching the output texture.
+        int[] fbos = new int[1];
+        GLES20.glGenFramebuffers(1, fbos, 0);
+        checkGlErrorOrThrow("glGenFramebuffers");
+        mFbo = fbos[0];
+    }
+
+    @Override
+    protected void release() {
+        super.release();
+        // Delete the FBO.
+        if (mFbo != -1) {
+            GLES20.glDeleteFramebuffers(1, new int[]{mFbo}, 0);
+            checkGlErrorOrThrow("glDeleteFramebuffers");
+            mFbo = -1;
+        }
+    }
+
+    /**
+     * Copies the input texture to the output texture.
+     *
+     * @param inputTextureId  the input texture ID. Usually this is an external texture.
+     * @param outputTextureId the output texture ID. This must be a 2D texture.
+     * @param outputWidth     the width of the output textures.
+     * @param outputHeight    the height of the output textures.
+     */
+    void draw(int inputTextureId, int outputTextureId, int outputWidth, int outputHeight) {
+        use();
+
+        // Bind external texture to TEXTURE0 as input texture.
+        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
+        checkGlErrorOrThrow("glActiveTexture");
+        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, inputTextureId);
+        checkGlErrorOrThrow("glBindTexture");
+
+        // Bind FBO and attach the output texture.
+        GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFbo);
+        checkGlErrorOrThrow("glBindFramebuffer");
+        GLES20.glFramebufferTexture2D(
+                GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,
+                GLES20.GL_TEXTURE_2D, outputTextureId, 0
+        );
+        checkGlErrorOrThrow("glFramebufferTexture2D");
+
+        // Copy the input texture to the output texture
+        drawArrays(outputWidth, outputHeight);
+
+        // Unbind FBO.
+        GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
+        checkGlErrorOrThrow("glBindFramebuffer");
+    }
+}
diff --git a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgramOverlay.java b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgramOverlay.java
new file mode 100644
index 0000000..8bea7e0
--- /dev/null
+++ b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlProgramOverlay.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl;
+
+import static androidx.camera.effects.opengl.Utils.checkGlErrorOrThrow;
+import static androidx.camera.effects.opengl.Utils.checkLocationOrThrow;
+
+import android.opengl.GLES20;
+import android.view.Surface;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.Logger;
+
+/**
+ * A GL program that copies the source while overlaying a texture on top of it.
+ */
+@RequiresApi(21)
+class GlProgramOverlay extends GlProgram {
+
+    private static final String TAG = "GlProgramOverlay";
+
+    static final String TEXTURE_MATRIX = "uTexMatrix";
+    static final String OVERLAY_SAMPLER = "samplerOverlayTexture";
+
+    private static final String VERTEX_SHADER = "uniform mat4 " + TEXTURE_MATRIX + ";\n"
+            + "attribute vec4 " + POSITION_ATTRIBUTE + ";\n"
+            + "attribute vec4 " + TEXTURE_ATTRIBUTE + ";\n"
+            + "varying vec2 " + TEXTURE_COORDINATES + ";\n"
+            + "void main() {\n"
+            + "    gl_Position = " + POSITION_ATTRIBUTE + ";\n"
+            + "    " + TEXTURE_COORDINATES + " = (" + TEXTURE_MATRIX + " * "
+            + TEXTURE_ATTRIBUTE + ").xy;\n"
+            + "}";
+
+    private static final String FRAGMENT_SHADER = "#extension GL_OES_EGL_image_external : require\n"
+            + "precision mediump float;\n"
+            + "varying vec2 " + TEXTURE_COORDINATES + ";\n"
+            + "uniform samplerExternalOES " + INPUT_SAMPLER + ";\n"
+            + "uniform sampler2D " + OVERLAY_SAMPLER + ";\n"
+            + "void main() {\n"
+            + "    vec4 inputColor = texture2D(" + INPUT_SAMPLER + ", "
+            + TEXTURE_COORDINATES + ");\n"
+            + "    vec4 overlayColor = texture2D(" + OVERLAY_SAMPLER + ", "
+            + TEXTURE_COORDINATES + ");\n"
+            + "    gl_FragColor = inputColor * (1.0 - overlayColor.a) + overlayColor;\n"
+            + "}";
+
+    // Location of the texture matrix used in vertex shader.
+    private int mTextureMatrixLoc = -1;
+
+    GlProgramOverlay() {
+        super(VERTEX_SHADER, FRAGMENT_SHADER);
+    }
+
+    @Override
+    protected void configure() {
+        super.configure();
+        // Associate input sampler with texture unit 0 (GL_TEXTURE0).
+        int inputSamplerLoc = GLES20.glGetUniformLocation(mProgramHandle, INPUT_SAMPLER);
+        checkLocationOrThrow(inputSamplerLoc, INPUT_SAMPLER);
+        GLES20.glUniform1i(inputSamplerLoc, 0);
+
+        // Associate overlay sampler with texture unit 1 (GL_TEXTURE1);
+        int overlaySamplerLoc = GLES20.glGetUniformLocation(mProgramHandle, OVERLAY_SAMPLER);
+        checkLocationOrThrow(overlaySamplerLoc, OVERLAY_SAMPLER);
+        GLES20.glUniform1i(overlaySamplerLoc, 1);
+
+        // Setup the location of the texture matrix.
+        mTextureMatrixLoc = GLES20.glGetUniformLocation(mProgramHandle, TEXTURE_MATRIX);
+        checkLocationOrThrow(mTextureMatrixLoc, TEXTURE_MATRIX);
+    }
+
+    @Override
+    protected void release() {
+        super.release();
+        mTextureMatrixLoc = -1;
+    }
+
+    /**
+     * Draws the input texture to the Surface with the overlay texture.
+     *
+     * @param inputTextureTarget the texture target of the input texture. This could be either
+     *                           GLES11Ext.GL_TEXTURE_EXTERNAL_OES or GLES20.GL_TEXTURE_2D,
+     *                           depending if copying from an external texture or a 2D texture.
+     * @param inputTextureId     the texture id of the input texture. This could be either an
+     *                           external texture or a 2D texture.
+     * @param overlayTextureId   the texture id of the overlay texture. This must be a 2D texture.
+     * @param matrix             the texture transformation matrix.
+     * @param glContext          the GL context which has the EGLSurface of the Surface.
+     * @param surface            the surface to draw to.
+     * @param timestampNs        the timestamp of the frame in nanoseconds.
+     */
+    void draw(int inputTextureTarget, int inputTextureId, int overlayTextureId,
+            @NonNull float[] matrix, @NonNull GlContext glContext, @NonNull Surface surface,
+            long timestampNs) {
+        use();
+
+        // Uploads the texture transformation matrix.
+        GLES20.glUniformMatrix4fv(mTextureMatrixLoc, 1, false, matrix, 0);
+        checkGlErrorOrThrow("glUniformMatrix4fv");
+
+        // Bind the input texture to GL_TEXTURE0
+        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
+        GLES20.glBindTexture(inputTextureTarget, inputTextureId);
+        checkGlErrorOrThrow("glBindTexture");
+
+        // Bind the overlay texture to TEXTURE1
+        GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
+        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, overlayTextureId);
+        checkGlErrorOrThrow("glBindTexture");
+
+        try {
+            glContext.drawAndSwap(surface, timestampNs);
+        } catch (IllegalStateException e) {
+            Logger.w(TAG, "Failed to draw the frame", e);
+        }
+    }
+}
diff --git a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlRenderer.java b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlRenderer.java
index 984a25a..50488dc 100644
--- a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlRenderer.java
+++ b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/GlRenderer.java
@@ -16,12 +16,22 @@
 
 package androidx.camera.effects.opengl;
 
+import static androidx.camera.effects.opengl.Utils.checkGlErrorOrThrow;
+import static androidx.camera.effects.opengl.Utils.configureExternalTexture;
+import static androidx.camera.effects.opengl.Utils.configureTexture2D;
+import static androidx.camera.effects.opengl.Utils.createTextureId;
+import static androidx.core.util.Preconditions.checkState;
+
 import android.graphics.Bitmap;
+import android.opengl.GLES11Ext;
 import android.opengl.GLES20;
+import android.opengl.GLUtils;
+import android.os.Build;
 import android.util.Size;
 import android.view.Surface;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 
 /**
@@ -36,9 +46,27 @@
  *
  * <p>It also allows the caller to upload a bitmap and overlay it when rendering to Surface.
  */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public final class GlRenderer {
 
+    private static final String TAG = "GlRenderer";
+
+    private boolean mInitialized = false;
+
+    private Thread mGlThread = null;
+    private final GlContext mGlContext = new GlContext();
+    private final GlProgramOverlay mGlProgramOverlay = new GlProgramOverlay();
+    private final GlProgramCopy mGlProgramCopy = new GlProgramCopy();
+
+    // Texture IDs.
+    private int mInputTextureId = -1;
+    private int mOverlayTextureId = -1;
+    @NonNull
+    private int[] mQueueTextureIds = new int[0];
+    private int mQueueTextureWidth = -1;
+    private int mQueueTextureHeight = -1;
+
     // --- Public methods ---
 
     /**
@@ -46,8 +74,22 @@
      *
      * <p>Must be called before any other methods.
      */
-    void init() {
-        throw new UnsupportedOperationException("TODO: implement this");
+    public void init() {
+        checkState(!mInitialized, "Already initialized");
+        mInitialized = true;
+        mGlThread = Thread.currentThread();
+        try {
+            mGlContext.init();
+            mGlProgramCopy.init();
+            mGlProgramOverlay.init();
+            mInputTextureId = createTextureId();
+            configureExternalTexture(mInputTextureId);
+            mOverlayTextureId = createTextureId();
+            configureTexture2D(mOverlayTextureId);
+        } catch (IllegalStateException | IllegalArgumentException e) {
+            release();
+            throw e;
+        }
     }
 
     /**
@@ -55,15 +97,41 @@
      *
      * <p>Once released, it can never be accessed again.
      */
-    void release() {
-        throw new UnsupportedOperationException("TODO: implement this");
+    public void release() {
+        checkGlThreadAndInitialized();
+
+        mInitialized = false;
+        mGlThread = null;
+        mQueueTextureWidth = -1;
+        mQueueTextureHeight = -1;
+
+        mGlContext.release();
+        mGlProgramOverlay.release();
+        mGlProgramCopy.release();
+
+        if (mInputTextureId != -1) {
+            GLES20.glDeleteTextures(1, new int[]{mInputTextureId}, 0);
+            checkGlErrorOrThrow("glDeleteTextures");
+            mInputTextureId = -1;
+        }
+        if (mOverlayTextureId != -1) {
+            GLES20.glDeleteTextures(1, new int[]{mOverlayTextureId}, 0);
+            checkGlErrorOrThrow("glDeleteTextures");
+            mOverlayTextureId = -1;
+        }
+        if (mQueueTextureIds.length > 0) {
+            GLES20.glDeleteTextures(mQueueTextureIds.length, mQueueTextureIds, 0);
+            checkGlErrorOrThrow("glDeleteTextures");
+            mQueueTextureIds = new int[0];
+        }
     }
 
     /**
      * Gets the external input texture ID created during initialization.
      */
     public int getInputTextureId() {
-        throw new UnsupportedOperationException("TODO: implement this");
+        checkGlThreadAndInitialized();
+        return mInputTextureId;
     }
 
     /**
@@ -79,14 +147,48 @@
      */
     @NonNull
     public int[] createBufferTextureIds(int queueDepth, @NonNull Size size) {
-        throw new UnsupportedOperationException("TODO: implement this");
+        checkGlThreadAndInitialized();
+        // Delete the current buffer if it exists.
+        if (mQueueTextureIds.length > 0) {
+            GLES20.glDeleteTextures(mQueueTextureIds.length, mQueueTextureIds, 0);
+            checkGlErrorOrThrow("glDeleteTextures");
+        }
+
+        mQueueTextureIds = new int[queueDepth];
+        // If the queue depth is 0, return an empty array. There is no need to create textures.
+        if (queueDepth == 0) {
+            return mQueueTextureIds;
+        }
+
+        // Create the textures.
+        GLES20.glGenTextures(queueDepth, mQueueTextureIds, 0);
+        checkGlErrorOrThrow("glGenTextures");
+        mQueueTextureWidth = size.getWidth();
+        mQueueTextureHeight = size.getHeight();
+        for (int textureId : mQueueTextureIds) {
+            configureTexture2D(textureId);
+            GLES20.glTexImage2D(
+                    GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, size.getWidth(), size.getHeight(), 0,
+                    GLES20.GL_RGB,
+                    GLES20.GL_UNSIGNED_BYTE,
+                    null
+            );
+        }
+        return mQueueTextureIds;
     }
 
     /**
      * Uploads the {@link Bitmap} to the overlay texture.
      */
     public void uploadOverlay(@NonNull Bitmap overlay) {
-        throw new UnsupportedOperationException("TODO: implement this");
+        checkGlThreadAndInitialized();
+
+        GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
+        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mOverlayTextureId);
+        checkGlErrorOrThrow("glBindTexture");
+
+        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, overlay, 0);
+        checkGlErrorOrThrow("texImage2D");
     }
 
     /**
@@ -96,7 +198,8 @@
      * {@link #renderQueueTextureToSurface}.
      */
     public void registerOutputSurface(@NonNull Surface surface) {
-        throw new UnsupportedOperationException("TODO: implement this");
+        checkGlThreadAndInitialized();
+        mGlContext.registerSurface(surface);
     }
 
     /**
@@ -106,7 +209,8 @@
      * {@link #renderQueueTextureToSurface} with the {@link Surface} throws an exception.
      */
     public void unregisterOutputSurface(@NonNull Surface surface) {
-        throw new UnsupportedOperationException("TODO: implement this");
+        checkGlThreadAndInitialized();
+        mGlContext.unregisterSurface(surface);
     }
 
     /**
@@ -117,7 +221,9 @@
      */
     public void renderInputToSurface(long timestampNs, @NonNull float[] textureTransform,
             @NonNull Surface surface) {
-        throw new UnsupportedOperationException("TODO: implement this");
+        checkGlThreadAndInitialized();
+        mGlProgramOverlay.draw(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mInputTextureId,
+                mOverlayTextureId, textureTransform, mGlContext, surface, timestampNs);
     }
 
     /**
@@ -128,9 +234,9 @@
      * {@link #createBufferTextureIds}.
      */
     public void renderQueueTextureToSurface(int textureId, long timestampNs,
-            @NonNull float[] textureTransform,
-            @NonNull Surface surface) {
-        throw new UnsupportedOperationException("TODO: implement this");
+            @NonNull float[] textureTransform, @NonNull Surface surface) {
+        mGlProgramOverlay.draw(GLES20.GL_TEXTURE_2D, textureId, mOverlayTextureId,
+                textureTransform, mGlContext, surface, timestampNs);
     }
 
     /**
@@ -139,8 +245,14 @@
      * <p>The texture ID must be from the latest return value of{@link #createBufferTextureIds}.
      */
     public void renderInputToQueueTexture(int textureId) {
-        throw new UnsupportedOperationException("TODO: implement this");
+        mGlProgramCopy.draw(mInputTextureId, textureId, mQueueTextureWidth, mQueueTextureHeight);
     }
 
     // --- Private methods ---
+
+    private void checkGlThreadAndInitialized() {
+        checkState(mInitialized, "OpenGlRenderer is not initialized");
+        checkState(mGlThread == Thread.currentThread(),
+                "Method call must be called on the GL thread.");
+    }
 }
diff --git a/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/Utils.java b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/Utils.java
new file mode 100644
index 0000000..e8f2d49
--- /dev/null
+++ b/camera/camera-effects/src/main/java/androidx/camera/effects/opengl/Utils.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.opengl;
+
+import static androidx.camera.effects.opengl.GlProgram.VERTEX_SIZE;
+
+import android.opengl.EGL14;
+import android.opengl.GLES11Ext;
+import android.opengl.GLES20;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.Logger;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+/**
+ * Utility methods for OpenGL.
+ */
+@RequiresApi(21)
+class Utils {
+
+    private static final String TAG = "GlUtils";
+
+    private static final int SIZEOF_FLOAT = 4;
+
+    private Utils() {
+    }
+
+    static void checkEglErrorOrLog(@NonNull String op) {
+        try {
+            checkEglErrorOrThrow(op);
+        } catch (IllegalStateException e) {
+            Logger.e(TAG, e.toString(), e);
+        }
+    }
+
+    static void drawArrays(int width, int height) {
+        GLES20.glViewport(0, 0, width, height);
+        GLES20.glScissor(0, 0, width, height);
+
+        // Draw the external texture to the intermediate texture.
+        GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, VERTEX_SIZE);
+        checkGlErrorOrThrow("glDrawArrays");
+    }
+
+    static FloatBuffer createFloatBuffer(float[] coords) {
+        ByteBuffer bb = ByteBuffer.allocateDirect(coords.length * SIZEOF_FLOAT);
+        bb.order(ByteOrder.nativeOrder());
+        FloatBuffer fb = bb.asFloatBuffer();
+        fb.put(coords);
+        fb.position(0);
+        return fb;
+    }
+
+    static void checkGlErrorOrThrow(@NonNull String op) {
+        int error = GLES20.glGetError();
+        if (error != GLES20.GL_NO_ERROR) {
+            throw new IllegalStateException(op + ": GL error 0x" + Integer.toHexString(error));
+        }
+    }
+
+    static void checkEglErrorOrThrow(@NonNull String op) {
+        int error = EGL14.eglGetError();
+        if (error != EGL14.EGL_SUCCESS) {
+            throw new IllegalStateException(op + ": EGL error: 0x" + Integer.toHexString(error));
+        }
+    }
+
+    static void checkLocationOrThrow(int location, @NonNull String label) {
+        if (location < 0) {
+            throw new IllegalStateException("Unable to locate '" + label + "' in program");
+        }
+    }
+
+    /**
+     * Creates a single texture ID.
+     */
+    static int createTextureId() {
+        int[] textureIds = new int[1];
+        GLES20.glGenTextures(1, textureIds, 0);
+        checkGlErrorOrThrow("glGenTextures");
+        return textureIds[0];
+    }
+
+    /**
+     * Configures the texture as a 2D texture.
+     */
+    static void configureTexture2D(int textureId) {
+        GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
+        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
+        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
+                GLES20.GL_LINEAR);
+        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
+                GLES20.GL_LINEAR);
+        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
+                GLES20.GL_CLAMP_TO_EDGE);
+        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
+                GLES20.GL_CLAMP_TO_EDGE);
+    }
+
+    /**
+     * Configures the texture as an external texture.
+     */
+    static void configureExternalTexture(int textureId) {
+        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureId);
+        checkGlErrorOrThrow("glBindTexture " + textureId);
+        GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER,
+                GLES20.GL_NEAREST);
+        GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER,
+                GLES20.GL_LINEAR);
+        GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S,
+                GLES20.GL_CLAMP_TO_EDGE);
+        GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T,
+                GLES20.GL_CLAMP_TO_EDGE);
+        checkGlErrorOrThrow("glTexParameter");
+    }
+}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraXUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraXUtil.java
index 18a03db..e367e1e 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraXUtil.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/CameraXUtil.java
@@ -16,7 +16,6 @@
 
 package androidx.camera.testing.impl;
 
-import android.annotation.SuppressLint;
 import android.content.Context;
 
 import androidx.annotation.GuardedBy;
@@ -104,7 +103,6 @@
                             completer.set(null);
                         }
 
-                        @SuppressLint("SyntheticAccessor")
                         @SuppressWarnings("FutureReturnValueIgnored")
                         @Override
                         public void onFailure(@NonNull Throwable t) {
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/ImageProxyUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/ImageProxyUtil.java
index 71df31d..6219e2c 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/ImageProxyUtil.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/ImageProxyUtil.java
@@ -16,8 +16,6 @@
 
 package androidx.camera.testing.impl;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 import androidx.camera.core.ImageProxy;
@@ -81,7 +79,6 @@
             final int dataValue,
             final boolean incrementValue) {
         return new ImageProxy.PlaneProxy() {
-            @SuppressLint("SyntheticAccessor")
             final ByteBuffer mBuffer =
                     createBuffer(width, height, pixelStride, dataValue, incrementValue);
 
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
index 5e9371e..1b93298 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/VideoCapture.java
@@ -57,6 +57,7 @@
 import android.graphics.Rect;
 import android.hardware.camera2.CameraDevice;
 import android.media.MediaCodec;
+import android.os.SystemClock;
 import android.util.Pair;
 import android.util.Range;
 import android.util.Size;
@@ -626,6 +627,8 @@
             // UPTIME when encoder surface is directly sent to camera.
             timebase = Timebase.UPTIME;
         }
+        Logger.d(TAG, "camera timebase = " + camera.getCameraInfoInternal().getTimebase()
+                + ", processing timebase = " + timebase);
         // Update the StreamSpec with new frame rate range and resolution.
         StreamSpec updatedStreamSpec =
                 streamSpec.toBuilder()
@@ -1189,10 +1192,21 @@
                     AtomicBoolean surfaceUpdateComplete = new AtomicBoolean(false);
                     CameraCaptureCallback cameraCaptureCallback =
                             new CameraCaptureCallback() {
+                                private boolean mIsFirstCaptureResult = true;
                                 @Override
                                 public void onCaptureCompleted(
                                         @NonNull CameraCaptureResult cameraCaptureResult) {
                                     super.onCaptureCompleted(cameraCaptureResult);
+                                    // Only print the first result to avoid flooding the log.
+                                    if (mIsFirstCaptureResult) {
+                                        mIsFirstCaptureResult = false;
+                                        Logger.d(TAG, "cameraCaptureResult timestampNs = "
+                                                + cameraCaptureResult.getTimestamp()
+                                                + ", current system uptimeMs = "
+                                                + SystemClock.uptimeMillis()
+                                                + ", current system realtimeMs = "
+                                                + SystemClock.elapsedRealtime());
+                                    }
                                     if (!surfaceUpdateComplete.get()) {
                                         Object tag = cameraCaptureResult.getTagBundle().getTag(
                                                 SURFACE_UPDATE_KEY);
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/CameraUseInconsistentTimebaseQuirk.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/CameraUseInconsistentTimebaseQuirk.java
index 0dc036e..6423bb5 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/CameraUseInconsistentTimebaseQuirk.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/CameraUseInconsistentTimebaseQuirk.java
@@ -30,7 +30,7 @@
 
 /**
  * <p>QuirkSummary
- *     Bug Id: 197805856, 280121263
+ *     Bug Id: 197805856, 280121263, 295060316
  *     Description: Quirk that denotes some devices use a timebase for camera frames that is
  *                  different than what is reported by
  *                  {@link android.hardware.camera2.CameraCharacteristics
@@ -50,8 +50,12 @@
             "sm6375"
     ));
 
+    private static final Set<String> BUILD_MODEL_SET = new HashSet<>(Arrays.asList(
+            "m2007j20cg", "m2007j20ct"  // Xiaomi Poco X3 NFC
+    ));
+
     static boolean load() {
-        return usesAffectedSoc() || isAffectedSamsungDevice();
+        return usesAffectedSoc() || isAffectedSamsungDevice() || isAffectedModel();
     }
 
     private static boolean usesAffectedSoc() {
@@ -63,4 +67,8 @@
         return "SAMSUNG".equalsIgnoreCase(Build.BRAND)
                 && BUILD_HARDWARE_SET.contains(Build.HARDWARE.toLowerCase());
     }
+
+    private static boolean isAffectedModel() {
+        return BUILD_MODEL_SET.contains(Build.MODEL.toLowerCase());
+    }
 }
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderImpl.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderImpl.java
index c342824..bfd7354 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderImpl.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/encoder/EncoderImpl.java
@@ -35,6 +35,7 @@
 import android.media.MediaCodecInfo;
 import android.media.MediaFormat;
 import android.os.Bundle;
+import android.os.SystemClock;
 import android.util.Range;
 import android.view.Surface;
 
@@ -1053,6 +1054,7 @@
             if (mIsVideoEncoder) {
                 Timebase inputTimebase;
                 if (DeviceQuirks.get(CameraUseInconsistentTimebaseQuirk.class) != null) {
+                    Logger.w(mTag, "CameraUseInconsistentTimebaseQuirk is enabled");
                     inputTimebase = null;
                 } else {
                     inputTimebase = mInputTimebase;
@@ -1064,7 +1066,7 @@
         }
 
         @Override
-        public void onInputBufferAvailable(MediaCodec mediaCodec, int index) {
+        public void onInputBufferAvailable(@NonNull MediaCodec mediaCodec, int index) {
             mEncoderExecutor.execute(() -> {
                 if (mStopped) {
                     Logger.w(mTag, "Receives input frame after codec is reset.");
@@ -1130,6 +1132,15 @@
                         if (checkBufferInfo(bufferInfo)) {
                             if (!mHasFirstData) {
                                 mHasFirstData = true;
+                                // Only print the first data to avoid flooding the log.
+                                Logger.d(mTag,
+                                        "data timestampUs = " + bufferInfo.presentationTimeUs
+                                                + ", data timebase = " + mInputTimebase
+                                                + ", current system uptimeMs = "
+                                                + SystemClock.uptimeMillis()
+                                                + ", current system realtimeMs = "
+                                                + SystemClock.elapsedRealtime()
+                                );
                             }
                             BufferInfo outBufferInfo = resolveOutputBufferInfo(bufferInfo);
                             mLastSentAdjustedTimeUs = outBufferInfo.presentationTimeUs;
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/VideoTimebaseConverter.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/VideoTimebaseConverter.java
index 6a14e07..679245f 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/VideoTimebaseConverter.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/workaround/VideoTimebaseConverter.java
@@ -66,16 +66,17 @@
     public long convertToUptimeUs(long timestampUs) {
         if (mInputTimebase == null) {
             if (isCloseToRealtime(timestampUs)) {
-                Logger.w(TAG, "Detected video buffer timestamp is close to realtime.");
                 mInputTimebase = Timebase.REALTIME;
             } else {
                 mInputTimebase = Timebase.UPTIME;
             }
+            Logger.d(TAG, "Detect input timebase = " + mInputTimebase);
         }
         switch (mInputTimebase) {
             case REALTIME:
                 if (mUptimeToRealtimeOffsetUs == -1) {
                     mUptimeToRealtimeOffsetUs = calculateUptimeToRealtimeOffsetUs();
+                    Logger.d(TAG, "mUptimeToRealtimeOffsetUs = " + mUptimeToRealtimeOffsetUs);
                 }
                 return timestampUs - mUptimeToRealtimeOffsetUs;
             case UPTIME:
diff --git a/camera/camera-view/api/current.ignore b/camera/camera-view/api/current.ignore
deleted file mode 100644
index fddd657..0000000
--- a/camera/camera-view/api/current.ignore
+++ /dev/null
@@ -1,73 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.camera.view.PreviewView#getOutputTransform():
-    Removed method androidx.camera.view.PreviewView.getOutputTransform() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform:
-    Removed class androidx.camera.view.transform.CoordinateTransform from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform):
-    Removed constructor androidx.camera.view.transform.CoordinateTransform(androidx.camera.view.transform.OutputTransform,androidx.camera.view.transform.OutputTransform) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform(androidx.camera.view.transform.OutputTransform arg1, androidx.camera.view.transform.OutputTransform arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform) parameter #1:
-    Removed parameter arg2 in androidx.camera.view.transform.CoordinateTransform(androidx.camera.view.transform.OutputTransform arg1, androidx.camera.view.transform.OutputTransform arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoint(android.graphics.PointF):
-    Removed method androidx.camera.view.transform.CoordinateTransform.mapPoint(android.graphics.PointF) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoint(android.graphics.PointF) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.mapPoint(android.graphics.PointF arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoints(float[]):
-    Removed method androidx.camera.view.transform.CoordinateTransform.mapPoints(float[]) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoints(float[]) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.mapPoints(float[] arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapRect(android.graphics.RectF):
-    Removed method androidx.camera.view.transform.CoordinateTransform.mapRect(android.graphics.RectF) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapRect(android.graphics.RectF) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.mapRect(android.graphics.RectF arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#transform(android.graphics.Matrix):
-    Removed method androidx.camera.view.transform.CoordinateTransform.transform(android.graphics.Matrix) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#transform(android.graphics.Matrix) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.transform(android.graphics.Matrix arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory:
-    Removed class androidx.camera.view.transform.FileTransformFactory from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#FileTransformFactory():
-    Removed constructor androidx.camera.view.transform.FileTransformFactory() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(android.content.ContentResolver, android.net.Uri):
-    Removed method androidx.camera.view.transform.FileTransformFactory.getOutputTransform(android.content.ContentResolver,android.net.Uri) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(android.content.ContentResolver, android.net.Uri) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(android.content.ContentResolver arg1, android.net.Uri arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(android.content.ContentResolver, android.net.Uri) parameter #1:
-    Removed parameter arg2 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(android.content.ContentResolver arg1, android.net.Uri arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.File):
-    Removed method androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.File) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.File) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.File arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.InputStream):
-    Removed method androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.InputStream) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.InputStream) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.InputStream arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#isUsingExifOrientation():
-    Removed method androidx.camera.view.transform.FileTransformFactory.isUsingExifOrientation() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#setUsingExifOrientation(boolean):
-    Removed method androidx.camera.view.transform.FileTransformFactory.setUsingExifOrientation(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#setUsingExifOrientation(boolean) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.setUsingExifOrientation(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory:
-    Removed class androidx.camera.view.transform.ImageProxyTransformFactory from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#ImageProxyTransformFactory():
-    Removed constructor androidx.camera.view.transform.ImageProxyTransformFactory() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#getOutputTransform(androidx.camera.core.ImageProxy):
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.getOutputTransform(androidx.camera.core.ImageProxy) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#getOutputTransform(androidx.camera.core.ImageProxy) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.ImageProxyTransformFactory.getOutputTransform(androidx.camera.core.ImageProxy arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#isUsingCropRect():
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.isUsingCropRect() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#isUsingRotationDegrees():
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.isUsingRotationDegrees() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingCropRect(boolean):
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.setUsingCropRect(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingCropRect(boolean) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.ImageProxyTransformFactory.setUsingCropRect(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingRotationDegrees(boolean):
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.setUsingRotationDegrees(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingRotationDegrees(boolean) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.ImageProxyTransformFactory.setUsingRotationDegrees(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.OutputTransform:
-    Removed class androidx.camera.view.transform.OutputTransform from compatibility checked API surface
diff --git a/camera/camera-view/api/restricted_current.ignore b/camera/camera-view/api/restricted_current.ignore
deleted file mode 100644
index fddd657..0000000
--- a/camera/camera-view/api/restricted_current.ignore
+++ /dev/null
@@ -1,73 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.camera.view.PreviewView#getOutputTransform():
-    Removed method androidx.camera.view.PreviewView.getOutputTransform() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform:
-    Removed class androidx.camera.view.transform.CoordinateTransform from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform):
-    Removed constructor androidx.camera.view.transform.CoordinateTransform(androidx.camera.view.transform.OutputTransform,androidx.camera.view.transform.OutputTransform) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform(androidx.camera.view.transform.OutputTransform arg1, androidx.camera.view.transform.OutputTransform arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform) parameter #1:
-    Removed parameter arg2 in androidx.camera.view.transform.CoordinateTransform(androidx.camera.view.transform.OutputTransform arg1, androidx.camera.view.transform.OutputTransform arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoint(android.graphics.PointF):
-    Removed method androidx.camera.view.transform.CoordinateTransform.mapPoint(android.graphics.PointF) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoint(android.graphics.PointF) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.mapPoint(android.graphics.PointF arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoints(float[]):
-    Removed method androidx.camera.view.transform.CoordinateTransform.mapPoints(float[]) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapPoints(float[]) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.mapPoints(float[] arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapRect(android.graphics.RectF):
-    Removed method androidx.camera.view.transform.CoordinateTransform.mapRect(android.graphics.RectF) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#mapRect(android.graphics.RectF) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.mapRect(android.graphics.RectF arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#transform(android.graphics.Matrix):
-    Removed method androidx.camera.view.transform.CoordinateTransform.transform(android.graphics.Matrix) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.CoordinateTransform#transform(android.graphics.Matrix) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.CoordinateTransform.transform(android.graphics.Matrix arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory:
-    Removed class androidx.camera.view.transform.FileTransformFactory from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#FileTransformFactory():
-    Removed constructor androidx.camera.view.transform.FileTransformFactory() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(android.content.ContentResolver, android.net.Uri):
-    Removed method androidx.camera.view.transform.FileTransformFactory.getOutputTransform(android.content.ContentResolver,android.net.Uri) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(android.content.ContentResolver, android.net.Uri) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(android.content.ContentResolver arg1, android.net.Uri arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(android.content.ContentResolver, android.net.Uri) parameter #1:
-    Removed parameter arg2 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(android.content.ContentResolver arg1, android.net.Uri arg2) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.File):
-    Removed method androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.File) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.File) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.File arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.InputStream):
-    Removed method androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.InputStream) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#getOutputTransform(java.io.InputStream) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.getOutputTransform(java.io.InputStream arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#isUsingExifOrientation():
-    Removed method androidx.camera.view.transform.FileTransformFactory.isUsingExifOrientation() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#setUsingExifOrientation(boolean):
-    Removed method androidx.camera.view.transform.FileTransformFactory.setUsingExifOrientation(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.FileTransformFactory#setUsingExifOrientation(boolean) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.FileTransformFactory.setUsingExifOrientation(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory:
-    Removed class androidx.camera.view.transform.ImageProxyTransformFactory from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#ImageProxyTransformFactory():
-    Removed constructor androidx.camera.view.transform.ImageProxyTransformFactory() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#getOutputTransform(androidx.camera.core.ImageProxy):
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.getOutputTransform(androidx.camera.core.ImageProxy) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#getOutputTransform(androidx.camera.core.ImageProxy) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.ImageProxyTransformFactory.getOutputTransform(androidx.camera.core.ImageProxy arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#isUsingCropRect():
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.isUsingCropRect() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#isUsingRotationDegrees():
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.isUsingRotationDegrees() from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingCropRect(boolean):
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.setUsingCropRect(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingCropRect(boolean) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.ImageProxyTransformFactory.setUsingCropRect(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingRotationDegrees(boolean):
-    Removed method androidx.camera.view.transform.ImageProxyTransformFactory.setUsingRotationDegrees(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.ImageProxyTransformFactory#setUsingRotationDegrees(boolean) parameter #0:
-    Removed parameter arg1 in androidx.camera.view.transform.ImageProxyTransformFactory.setUsingRotationDegrees(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.camera.view.transform.OutputTransform:
-    Removed class androidx.camera.view.transform.OutputTransform from compatibility checked API surface
diff --git a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequest.java b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequest.java
index 5efa64a..49b2ae6 100644
--- a/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequest.java
+++ b/camera/camera-viewfinder/src/main/java/androidx/camera/viewfinder/ViewfinderSurfaceRequest.java
@@ -177,7 +177,6 @@
         // collected as long as the ViewfinderSurface is referenced externally (via
         // getViewfinderSurface()).
         mInternalViewfinderSurface = new ViewfinderSurface() {
-            @SuppressLint("SyntheticAccessor")
             @NonNull
             @Override
             protected ListenableFuture<Surface> provideSurfaceAsync() {
diff --git a/camera/integration-tests/avsynctestapp/lint-baseline.xml b/camera/integration-tests/avsynctestapp/lint-baseline.xml
new file mode 100644
index 0000000..f784698
--- /dev/null
+++ b/camera/integration-tests/avsynctestapp/lint-baseline.xml
@@ -0,0 +1,679 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not start audio generation, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not start audio generation, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not start audio generation, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;start audio generation&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;start audio generation&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;start audio generation&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not stop audio generation, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not stop audio generation, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not stop audio generation, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;stop audio generation&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;stop audio generation&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;stop audio generation&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;playState before stopped: ${audioTrack!!.playState}&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;playState before stopped: ${audioTrack!!.playState}&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;playState before stopped: ${audioTrack!!.playState}&quot;)"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;playbackHeadPosition before stopped: ${audioTrack!!.playbackHeadPosition}&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;playbackHeadPosition before stopped: ${audioTrack!!.playbackHeadPosition}&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;playbackHeadPosition before stopped: ${audioTrack!!.playbackHeadPosition}&quot;)"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgumentNonnegative can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        checkArgumentNonnegative(frequency, &quot;The input frequency should not be negative.&quot;)"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgumentNonnegative can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        checkArgumentNonnegative(frequency, &quot;The input frequency should not be negative.&quot;)"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        checkArgument(beepLengthInSec >= 0, &quot;The beep length should not be negative.&quot;)"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        checkArgument(beepLengthInSec >= 0, &quot;The beep length should not be negative.&quot;)"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not initial audio track, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not initial audio track, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.i(TAG, &quot;Will not initial audio track, since AudioGenerator is disabled.&quot;)"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with sample rate: $sampleRate&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with sample rate: $sampleRate&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with sample rate: $sampleRate&quot;)"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with beep frequency: $frequency&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with beep frequency: $frequency&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with beep frequency: $frequency&quot;)"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with buffer size: $bufferSize&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with buffer size: $bufferSize&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.i can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.i(TAG, &quot;initAudioTrack with buffer size: $bufferSize&quot;)"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/AudioGenerator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Camera binding failed&quot;, exception)"
+        errorLine2="                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Camera binding failed&quot;, exception)"
+        errorLine2="                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Camera binding failed&quot;, exception)"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Camera binding failed&quot;, exception)"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceQuirks.get can only be called from within the same library (androidx.camera:camera-video)"
+        errorLine1="        return DeviceQuirks.get(MediaStoreVideoCannotWrite::class.java) == null"
+        errorLine2="                            ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceQuirks.get can only be called from within the same library (androidx.camera:camera-video)"
+        errorLine1="        return DeviceQuirks.get(MediaStoreVideoCannotWrite::class.java) == null"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Failed to create directory: $videoFolder&quot;)"
+        errorLine2="                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Failed to create directory: $videoFolder&quot;)"
+        errorLine2="                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Failed to create directory: $videoFolder&quot;)"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Logger.d(TAG, &quot;Video saved to: $uri&quot;)"
+        errorLine2="                           ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Logger.d(TAG, &quot;Video saved to: $uri&quot;)"
+        errorLine2="                             ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Logger.d(TAG, &quot;Video saved to: $uri&quot;)"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Logger.e(TAG, &quot;Failed to save video: $msg&quot;)"
+        errorLine2="                           ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Logger.e(TAG, &quot;Failed to save video: $msg&quot;)"
+        errorLine2="                             ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Logger.e(TAG, &quot;Failed to save video: $msg&quot;)"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/model/CameraHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkArgument(brightness in MIN_SCREEN_BRIGHTNESS..MAX_SCREEN_BRIGHTNESS)"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/MainActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkArgument(percentage in 0.0..1.0)"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Start signal generation.&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Start signal generation.&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Start signal generation.&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState(isGeneratorReady)"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Stop signal generation.&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Stop signal generation.&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Stop signal generation.&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState(isGeneratorReady)"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Start recording.&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Start recording.&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Start recording.&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState(isRecorderReady)"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Stop recording.&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Stop recording.&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Stop recording.&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState(isRecorderReady)"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Pause recording.&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Pause recording.&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Pause recording.&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState(isRecorderReady)"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Resume recording.&quot;)"
+        errorLine2="               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Resume recording.&quot;)"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Logger.d(TAG, &quot;Resume recording.&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState(isRecorderReady)"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/avsync/SignalGeneratorViewModel.kt"/>
+    </issue>
+
+</issues>
diff --git a/camera/integration-tests/camerapipetestapp/lint-baseline.xml b/camera/integration-tests/camerapipetestapp/lint-baseline.xml
index 0941ff7..bb49d47 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 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
@@ -20,6 +20,1167 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="Companion.getNORMAL can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="    private var operatingMode: CameraGraph.OperatingMode = CameraGraph.OperatingMode.NORMAL"
+        errorLine2="                                                                                     ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.cameras can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        val cameraDevices = cameraPipe.cameras()"
+        errorLine2="                                       ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitCameraIds-SeavPBo can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        cameraIdGroups = cameraDevices.awaitCameraIds()!!.map { listOf(it) } +"
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitConcurrentCameraIds-SeavPBo can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraDevices.awaitConcurrentCameraIds()!!.filter { it.size &lt;= 2 }.map { it.toList() }"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getNORMAL can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        if (lastCameraIdGroup.size == 1 &amp;&amp; operatingMode == CameraGraph.OperatingMode.NORMAL) {"
+        errorLine2="                                                                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getHIGH_SPEED can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            operatingMode = CameraGraph.OperatingMode.HIGH_SPEED"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getNORMAL can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        operatingMode = CameraGraph.OperatingMode.NORMAL"
+        errorLine2="                                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            result = CameraPipe(CameraPipe.Config(appContext = this))"
+        errorLine2="                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeApplication.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            result = CameraPipe(CameraPipe.Config(appContext = this))"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeApplication.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Config can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            result = CameraPipe(CameraPipe.Config(appContext = this))"
+        errorLine2="                                           ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeApplication.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Config can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            result = CameraPipe(CameraPipe.Config(appContext = this))"
+        errorLine2="                                                               ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/CameraPipeApplication.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getNORMAL can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            operatingMode: CameraGraph.OperatingMode? = CameraGraph.OperatingMode.NORMAL"
+        errorLine2="                                                                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getHIGH_SPEED can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            if (operatingMode == CameraGraph.OperatingMode.HIGH_SPEED) {"
+        errorLine2="                                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitCameraMetadata-FpsL5FU can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitCameraMetadata-FpsL5FU can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.cameras can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraMetadata.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                cameraMetadata[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]!!"
+        errorLine2="                              ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraMetadata.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                cameraMetadata[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]!!"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraMetadata.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                cameraMetadata[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]!!"
+        errorLine2="                              ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraMetadata.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                cameraMetadata[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]!!"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStreamConfig = Config.create("
+        errorLine2="                                                ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                yuvSize,"
+        errorLine2="                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getUNKNOWN-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                StreamFormat.UNKNOWN,"
+        errorLine2="                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                outputType = OutputStream.OutputType.SURFACE_VIEW"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getSURFACE_VIEW can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                outputType = OutputStream.OutputType.SURFACE_VIEW"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val privateStreamConfig = Config.create("
+        errorLine2="                                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                privateOutputSize,"
+        errorLine2="                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getPRIVATE-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                StreamFormat.PRIVATE,"
+        errorLine2="                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                outputType = OutputStream.OutputType.SURFACE_VIEW,"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getSURFACE_VIEW can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                outputType = OutputStream.OutputType.SURFACE_VIEW,"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                streamUseCase = OutputStream.StreamUseCase.PREVIEW"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getPREVIEW-vrKr8v8 can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                streamUseCase = OutputStream.StreamUseCase.PREVIEW"
+        errorLine2="                                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getHIGH_SPEED can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                sessionMode = CameraGraph.OperatingMode.HIGH_SPEED,"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.create can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraGraph = cameraPipe.create(config)"
+        errorLine2="                                         ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.create can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraGraph = cameraPipe.create(config)"
+        errorLine2="                                                ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.getStreams can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStream = cameraGraph.streams[privateStreamConfig]!!"
+        errorLine2="                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStream = cameraGraph.streams[privateStreamConfig]!!"
+        errorLine2="                                                      ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStream = cameraGraph.streams[privateStreamConfig]!!"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.outputs can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderOutput = viewfinderStream.outputs.single()"
+        errorLine2="                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                viewfinderOutput.size,"
+        errorLine2="                                 ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        cameraGraph.setSurface(viewfinderStream.id, surface)"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        cameraGraph.setSurface(viewfinderStream.id, surface)"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        cameraGraph.setSurface(viewfinderStream.id, surface)"
+        errorLine2="                                                                ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.getStreams can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val privateStream = cameraGraph.streams[privateStreamConfig]!!"
+        errorLine2="                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val privateStream = cameraGraph.streams[privateStreamConfig]!!"
+        errorLine2="                                                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val privateStream = cameraGraph.streams[privateStreamConfig]!!"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.outputs can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val privateOutput = privateStream.outputs.single()"
+        errorLine2="                                              ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    privateOutput.size.width,"
+        errorLine2="                                  ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    privateOutput.size.height,"
+        errorLine2="                                  ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getFormat-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    privateOutput.format.value,"
+        errorLine2="                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    privateOutput.size.width,"
+        errorLine2="                                  ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    privateOutput.size.height,"
+        errorLine2="                                  ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getFormat-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    privateOutput.format.value,"
+        errorLine2="                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.setSurface(privateStream.id, imageReader.surface)"
+        errorLine2="                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.setSurface(privateStream.id, imageReader.surface)"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.setSurface(privateStream.id, imageReader.surface)"
+        errorLine2="                                                 ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.acquireSessionOrNull can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.acquireSessionOrNull()!!.use {"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Session.startRepeating can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                it.startRepeating("
+        errorLine2="                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Session.startRepeating can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Request("
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        streams = listOf(viewfinderStream.id, privateStream.id)"
+        errorLine2="                                                          ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        streams = listOf(viewfinderStream.id, privateStream.id)"
+        errorLine2="                                                                            ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitCameraMetadata-FpsL5FU can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitCameraMetadata-FpsL5FU can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.cameras can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraMetadata.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                cameraMetadata[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]!!"
+        errorLine2="                              ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraMetadata.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                cameraMetadata[CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP]!!"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStreamConfig = Config.create("
+        errorLine2="                                                ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                yuvSize,"
+        errorLine2="                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getUNKNOWN-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                StreamFormat.UNKNOWN,"
+        errorLine2="                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                outputType = OutputStream.OutputType.SURFACE_VIEW"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getSURFACE_VIEW can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                outputType = OutputStream.OutputType.SURFACE_VIEW"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val yuvStreamConfig = Config.create("
+        errorLine2="                                         ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                yuvSize,"
+        errorLine2="                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getYUV_420_888-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                StreamFormat.YUV_420_888"
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.create can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraGraph = cameraPipe.create(config)"
+        errorLine2="                                         ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.create can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraGraph = cameraPipe.create(config)"
+        errorLine2="                                                ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.getStreams can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStream = cameraGraph.streams[viewfinderStreamConfig]!!"
+        errorLine2="                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStream = cameraGraph.streams[viewfinderStreamConfig]!!"
+        errorLine2="                                                      ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderStream = cameraGraph.streams[viewfinderStreamConfig]!!"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.outputs can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderOutput = viewfinderStream.outputs.single()"
+        errorLine2="                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                viewfinderOutput.size,"
+        errorLine2="                                 ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        cameraGraph.setSurface(viewfinderStream.id, surface)"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        cameraGraph.setSurface(viewfinderStream.id, surface)"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        cameraGraph.setSurface(viewfinderStream.id, surface)"
+        errorLine2="                                                                ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.getStreams can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val yuvStream = cameraGraph.streams[yuvStreamConfig]!!"
+        errorLine2="                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val yuvStream = cameraGraph.streams[yuvStreamConfig]!!"
+        errorLine2="                                               ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val yuvStream = cameraGraph.streams[yuvStreamConfig]!!"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.outputs can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val yuvOutput = yuvStream.outputs.single()"
+        errorLine2="                                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                yuvOutput.size.width,"
+        errorLine2="                          ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                yuvOutput.size.height,"
+        errorLine2="                          ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getFormat-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                yuvOutput.format.value,"
+        errorLine2="                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.setSurface(yuvStream.id, imageReader.surface)"
+        errorLine2="                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.setSurface(yuvStream.id, imageReader.surface)"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.setSurface(yuvStream.id, imageReader.surface)"
+        errorLine2="                                             ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.acquireSessionOrNull can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            cameraGraph.acquireSessionOrNull()!!.use {"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Session.startRepeating can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                it.startRepeating("
+        errorLine2="                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Session.startRepeating can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Request("
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        streams = listOf(viewfinderStream.id, yuvStream.id)"
+        errorLine2="                                                          ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        streams = listOf(viewfinderStream.id, yuvStream.id)"
+        errorLine2="                                                                        ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitCameraMetadata-FpsL5FU can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraDevices.awaitCameraMetadata-FpsL5FU can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.cameras can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                val cameraMetadata = cameraPipe.cameras().awaitCameraMetadata(cameraId)"
+        errorLine2="                                                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                Config.create("
+        errorLine2="                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    size,"
+        errorLine2="                    ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getPRIVATE-8FPWQzE can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    StreamFormat.PRIVATE,"
+        errorLine2="                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.create-bSQo6-Q can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    outputType = OutputStream.OutputType.SURFACE_VIEW,"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Companion.getSURFACE_VIEW can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    outputType = OutputStream.OutputType.SURFACE_VIEW,"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.createCameraGraphs can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraGraphs = cameraPipe.createCameraGraphs(configs)"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraPipe.createCameraGraphs can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val cameraGraphs = cameraPipe.createCameraGraphs(configs)"
+        errorLine2="                                                             ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.getStreams can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    cameraGraph.streams[viewfinderStreamConfig]!!"
+        errorLine2="                                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    cameraGraph.streams[viewfinderStreamConfig]!!"
+        errorLine2="                                       ~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StreamGraph.get can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    cameraGraph.streams[viewfinderStreamConfig]!!"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.outputs can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val viewfinderOutputs = viewfinderStreams.map { it.outputs.single() }"
+        errorLine2="                                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputStream.getSize can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    viewfinderOutputs[i].size,"
+        errorLine2="                                         ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            cameraGraphs[i].setSurface(viewfinderStreams[i].id, surface)"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setSurface-NYG5g8E can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            cameraGraphs[i].setSurface(viewfinderStreams[i].id, surface)"
+        errorLine2="                                                                                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            cameraGraphs[i].setSurface(viewfinderStreams[i].id, surface)"
+        errorLine2="                                                                            ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.acquireSessionOrNull can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                cameraGraph.acquireSessionOrNull()!!.use {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Session.startRepeating can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    it.startRepeating("
+        errorLine2="                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Session.startRepeating can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        Request("
+        errorLine2="                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraStream.id can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            streams = listOf(viewfinderStream.id)"
+        errorLine2="                                                              ~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.start can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        cameraGraph.start()"
+        errorLine2="                    ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setForeground can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        cameraGraph.isForeground = true"
+        errorLine2="                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.setForeground can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        cameraGraph.isForeground = false"
+        errorLine2="                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraGraph.stop can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        cameraGraph.stop()"
+        errorLine2="                    ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Debug.formatCameraGraphProperties can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Debug.formatCameraGraphProperties(cameraMetadata, cameraConfig, cameraGraph)"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Debug.formatCameraGraphProperties can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Debug.formatCameraGraphProperties(cameraMetadata, cameraConfig, cameraGraph)"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Debug.formatCameraGraphProperties can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Debug.formatCameraGraphProperties(cameraMetadata, cameraConfig, cameraGraph)"
+        errorLine2="                                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Debug.formatCameraGraphProperties can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Debug.formatCameraGraphProperties(cameraMetadata, cameraConfig, cameraGraph)"
+        errorLine2="                                                                        ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/camera2/pipe/SimpleCamera.kt"/>
+    </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; />"
diff --git a/camera/integration-tests/coretestapp/lint-baseline.xml b/camera/integration-tests/coretestapp/lint-baseline.xml
index fa378f8..b1ee614 100644
--- a/camera/integration-tests/coretestapp/lint-baseline.xml
+++ b/camera/integration-tests/coretestapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
@@ -11,6 +11,663 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="CameraInfoInternal can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                if (cameraInfo instanceof CameraInfoInternal) {"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceQuirks.getAll can only be called from within the same library (androidx.camera:camera-video)"
+        errorLine1="                    Quirks deviceQuirks = DeviceQuirks.getAll();"
+        errorLine2="                                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraInfoInternal can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Quirks cameraQuirks = ((CameraInfoInternal) cameraInfo).getCameraQuirks();"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraInfoInternal.getCameraQuirks can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    Quirks cameraQuirks = ((CameraInfoInternal) cameraInfo).getCameraQuirks();"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Quirks.contains can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    if (deviceQuirks.contains(CrashWhenTakingPhotoWithAutoFlashAEModeQuirk.class)"
+        errorLine2="                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Quirks.contains can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    if (deviceQuirks.contains(CrashWhenTakingPhotoWithAutoFlashAEModeQuirk.class)"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Quirks.contains can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            || cameraQuirks.contains(ImageCaptureFailWithAutoFlashQuirk.class)"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Quirks.contains can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            || cameraQuirks.contains(ImageCaptureFailWithAutoFlashQuirk.class)"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Quirks.contains can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            || cameraQuirks.contains(ImageCaptureFlashNotFireQuirk.class)) {"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Quirks.contains can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            || cameraQuirks.contains(ImageCaptureFlashNotFireQuirk.class)) {"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceQuirks.get can only be called from within the same library (androidx.camera:camera-video)"
+        errorLine1="                    if (DeviceQuirks.get(MediaStoreVideoCannotWrite.class) != null) {"
+        errorLine2="                                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceQuirks.get can only be called from within the same library (androidx.camera:camera-video)"
+        errorLine1="                    if (DeviceQuirks.get(MediaStoreVideoCannotWrite.class) != null) {"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Camera.isUseCasesCombinationSupported can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        return targetCamera.isUseCasesCombinationSupported(useCases.toArray(new UseCase[0]));"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.directExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            }, CameraXExecutors.directExecutor());"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        CameraXExecutors.mainThreadExecutor());"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        CameraXExecutors.mainThreadExecutor());"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AspectRatioUtil.ASPECT_RATIO_16_9 can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        ? AspectRatioUtil.ASPECT_RATIO_16_9 : AspectRatioUtil.ASPECT_RATIO_4_3;"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AspectRatioUtil.ASPECT_RATIO_4_3 can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        ? AspectRatioUtil.ASPECT_RATIO_16_9 : AspectRatioUtil.ASPECT_RATIO_4_3;"
+        errorLine2="                                                                              ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Camera.isUseCasesCombinationSupported can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        return mCamera.isUseCasesCombinationSupported(buildUseCases().toArray(new UseCase[0]));"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            CameraXExecutors.mainThreadExecutor());"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TransformationInfo.hasCameraTransform can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                                    mHasCameraTransform = transformationInfo.hasCameraTransform();"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/OpenGLRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TransformUtils.within360 can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            return within360((180 - mTextureRotationDegrees) + mSurfaceRotationDegrees);"
+        errorLine2="                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/OpenGLRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mPreviewView, &quot;Cannot get the preview view.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mPreviewView, &quot;Cannot get the preview view.&quot;);"
+        errorLine2="                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mPreviewView, &quot;Cannot get the preview view.&quot;);"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mDurationText, &quot;Cannot get the duration text view.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mDurationText, &quot;Cannot get the duration text view.&quot;);"
+        errorLine2="                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mDurationText, &quot;Cannot get the duration text view.&quot;);"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mSwitchTimeText, &quot;Cannot get the switch time text view.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mSwitchTimeText, &quot;Cannot get the switch time text view.&quot;);"
+        errorLine2="                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mSwitchTimeText, &quot;Cannot get the switch time text view.&quot;);"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mStartButton, &quot;Cannot get the start button view.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mStartButton, &quot;Cannot get the start button view.&quot;);"
+        errorLine2="                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mStartButton, &quot;Cannot get the start button view.&quot;);"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                Logger.d(TAG, msg);"
+        errorLine2="                       ~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                Logger.d(TAG, msg);"
+        errorLine2="                         ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                Logger.d(TAG, msg);"
+        errorLine2="                              ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mCamera, &quot;The camera instance should not be null.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mCamera, &quot;The camera instance should not be null.&quot;);"
+        errorLine2="                                   ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mCamera, &quot;The camera instance should not be null.&quot;);"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mCameraProvider, &quot;The camera provider should not be null&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mCameraProvider, &quot;The camera provider should not be null&quot;);"
+        errorLine2="                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mCameraProvider, &quot;The camera provider should not be null&quot;);"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mPreview, &quot;The preview use case should not be null.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mPreview, &quot;The preview use case should not be null.&quot;);"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mPreview, &quot;The preview use case should not be null.&quot;);"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mVideoCapture, &quot;The video capture use case should not be null.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mVideoCapture, &quot;The video capture use case should not be null.&quot;);"
+        errorLine2="                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mVideoCapture, &quot;The video capture use case should not be null.&quot;);"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mVideoCapture, &quot;The video capture use case should not be null.&quot;);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mVideoCapture, &quot;The video capture use case should not be null.&quot;);"
+        errorLine2="                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkNotNull(mVideoCapture, &quot;The video capture use case should not be null.&quot;);"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.d(TAG, msg);"
+        errorLine2="                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.d(TAG, msg);"
+        errorLine2="                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.d(TAG, msg);"
+        errorLine2="                          ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.canDeviceWriteToMediaStore can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        if (E2ETestUtil.canDeviceWriteToMediaStore()) {"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoMediaStoreOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    E2ETestUtil.generateVideoMediaStoreOptions(this.getContentResolver(),"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoMediaStoreOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    E2ETestUtil.generateVideoMediaStoreOptions(this.getContentResolver(),"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoMediaStoreOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                            videoFileName));"
+        errorLine2="                            ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoFileOutputOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    E2ETestUtil.generateVideoFileOutputOptions(videoFileName, &quot;mp4&quot;));"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoFileOutputOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    E2ETestUtil.generateVideoFileOutputOptions(videoFileName, &quot;mp4&quot;));"
+        errorLine2="                                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoFileOutputOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    E2ETestUtil.generateVideoFileOutputOptions(videoFileName, &quot;mp4&quot;));"
+        errorLine2="                                                                              ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                                        Preconditions.checkNotNull(mRecording, &quot;The in-progress &quot;"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                                        Preconditions.checkNotNull(mRecording, &quot;The in-progress &quot;"
+        errorLine2="                                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                                        Preconditions.checkNotNull(mRecording, &quot;The in-progress &quot;"
+        errorLine2="                                                                               ^">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.writeTextToExternalFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        E2ETestUtil.writeTextToExternalFile(information,"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.writeTextToExternalFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        E2ETestUtil.writeTextToExternalFile(information,"
+        errorLine2="                                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.writeTextToExternalFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                generateFileName(INFO_FILE_PREFIX, false), &quot;txt&quot;);"
+        errorLine2="                ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.writeTextToExternalFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                generateFileName(INFO_FILE_PREFIX, false), &quot;txt&quot;);"
+        errorLine2="                                                           ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.isFileNameValid can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        if (!isUnique &amp;&amp; !E2ETestUtil.isFileNameValid(prefix)) {"
+        errorLine2="                                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.isFileNameValid can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        if (!isUnique &amp;&amp; !E2ETestUtil.isFileNameValid(prefix)) {"
+        errorLine2="                                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.isFileNameValid can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        if (E2ETestUtil.isFileNameValid(prefix)) {"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.isFileNameValid can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        if (E2ETestUtil.isFileNameValid(prefix)) {"
+        errorLine2="                                        ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java"/>
+    </issue>
+
+    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
diff --git a/camera/integration-tests/diagnosetestapp/lint-baseline.xml b/camera/integration-tests/diagnosetestapp/lint-baseline.xml
new file mode 100644
index 0000000..d2c54a0
--- /dev/null
+++ b/camera/integration-tests/diagnosetestapp/lint-baseline.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Threads.checkMainThread can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Threads.checkMainThread()"
+        errorLine2="                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/diagnose/ImageCaptureTask.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState(calibrationThreadId == Thread.currentThread().id,"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/diagnose/MainActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            &quot;Not working on Calibration Thread&quot;)"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/diagnose/MainActivity.kt"/>
+    </issue>
+
+</issues>
diff --git a/camera/integration-tests/extensionstestapp/lint-baseline.xml b/camera/integration-tests/extensionstestapp/lint-baseline.xml
new file mode 100644
index 0000000..6085300
--- /dev/null
+++ b/camera/integration-tests/extensionstestapp/lint-baseline.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Futures.immediateFuture can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="    private var imageSaveTerminationFuture: ListenableFuture&lt;Any?> = Futures.immediateFuture(null)"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Futures.immediateFuture can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="    private var imageSaveTerminationFuture: ListenableFuture&lt;Any?> = Futures.immediateFuture(null)"
+        errorLine2="                                                                                             ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        Preconditions.checkState("
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            &quot;take picture button is only enabled when session is configured successfully&quot;"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/Camera2ExtensionsActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.directExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        mPreviewView.setFrameUpdateListener(CameraXExecutors.directExecutor(), (timestamp) -> {"
+        errorLine2="                                                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="PreviewView.setFrameUpdateListener can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        mPreviewView.setFrameUpdateListener(CameraXExecutors.directExecutor(), (timestamp) -> {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.ioExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            imageAnalysis.setAnalyzer(CameraXExecutors.ioExecutor(),  img -> {"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.createFromFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        val exif = Exif.createFromFile(tempFile)"
+        errorLine2="                        ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/utils/FileUtil.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.createFromFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        val exif = Exif.createFromFile(tempFile)"
+        errorLine2="                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/utils/FileUtil.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.rotate can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        exif.rotate(rotationDegrees)"
+        errorLine2="             ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/utils/FileUtil.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.save can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        exif.save()"
+        errorLine2="             ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/utils/FileUtil.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                CameraXExecutors.mainThreadExecutor()"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/validation/ImageCaptureActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                CameraXExecutors.mainThreadExecutor()"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/validation/ImageCaptureActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        CameraXExecutors.mainThreadExecutor()"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/extensions/validation/ImageCaptureActivity.kt"/>
+    </issue>
+
+</issues>
diff --git a/camera/integration-tests/timingtestapp/lint-baseline.xml b/camera/integration-tests/timingtestapp/lint-baseline.xml
index 44067f5..1cd635d 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 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
@@ -127,4 +127,22 @@
             file="src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.directExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    surface, CameraXExecutors.directExecutor(),"
+        errorLine2="                                              ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                CameraXExecutors.mainThreadExecutor(),"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt"/>
+    </issue>
+
 </issues>
diff --git a/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml b/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml
index 85f7f92..d33c7ad 100644
--- a/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml
+++ b/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml
@@ -1,5 +1,203 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            CameraXExecutors.mainThreadExecutor(),"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            CameraXExecutors.mainThreadExecutor(),"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            CameraXExecutors.mainThreadExecutor(),"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            CameraXExecutors.mainThreadExecutor(),"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.createFromFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        private val exif = Exif.createFromFile(file)"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.createFromFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        private val exif = Exif.createFromFile(file)"
+        errorLine2="                                               ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getHeight can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getHeight can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getWidth can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getWidth can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getRotation can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getRotation() = exif.rotation"
+        errorLine2="                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getRotation can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getRotation() = exif.rotation"
+        errorLine2="                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.createFromInputStream can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            exif = Exif.createFromInputStream(inputStream!!)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.createFromInputStream can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            exif = Exif.createFromInputStream(inputStream!!)"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getHeight can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getHeight can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getWidth can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getWidth can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getResolution() = Size(exif.width, exif.height)"
+        errorLine2="                                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getRotation can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getRotation() = exif.rotation"
+        errorLine2="                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Exif.getRotation can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        override fun getRotation() = exif.rotation"
+        errorLine2="                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureResult.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputTransform.getMatrix can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        mlKitAnalyzer.updateTransform(outputTransform.matrix)"
+        errorLine2="                                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/compose/ui/screen/imagecapture/ImageCaptureScreenState.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OutputTransform.getMatrix can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        mlKitAnalyzer.updateTransform(outputTransform.matrix)"
+        errorLine2="                                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/uiwidgets/compose/ui/screen/imagecapture/ImageCaptureScreenState.kt"/>
+    </issue>
 
     <issue
         id="PrimitiveInLambda"
diff --git a/camera/integration-tests/viewfindertestapp/build.gradle b/camera/integration-tests/viewfindertestapp/build.gradle
index e4e4552..b5afb537 100644
--- a/camera/integration-tests/viewfindertestapp/build.gradle
+++ b/camera/integration-tests/viewfindertestapp/build.gradle
@@ -34,9 +34,6 @@
             shrinkResources true
         }
     }
-    lintOptions {
-        disable("SyntheticAccessor")
-    }
     namespace "androidx.camera.integration.viewfinder"
 }
 
diff --git a/camera/integration-tests/viewfindertestapp/lint-baseline.xml b/camera/integration-tests/viewfindertestapp/lint-baseline.xml
new file mode 100644
index 0000000..ce49f94
--- /dev/null
+++ b/camera/integration-tests/viewfindertestapp/lint-baseline.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="CompareSizesByArea can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    /* comp = */ CompareSizesByArea()"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/viewfinder/CameraViewfinderFoldableFragment.kt"/>
+    </issue>
+
+</issues>
diff --git a/camera/integration-tests/viewtestapp/lint-baseline.xml b/camera/integration-tests/viewtestapp/lint-baseline.xml
index 715b1e4..875125d 100644
--- a/camera/integration-tests/viewtestapp/lint-baseline.xml
+++ b/camera/integration-tests/viewtestapp/lint-baseline.xml
@@ -1,5 +1,518 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-alpha05" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-alpha05)" variant="all" version="8.0.0-alpha05">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        CameraXExecutors.mainThreadExecutor().execute {"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ComposeUiFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraSelector.getLensFacing can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            if (cameraController.cameraSelector.lensFacing == LENS_FACING_BACK) {"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/EffectsFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraSelector.getLensFacing can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            if (cameraController.cameraSelector.lensFacing == LENS_FACING_BACK) {"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/EffectsFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.directExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            directExecutor(),"
+        errorLine2="            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/EffectsFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.directExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            directExecutor()"
+        errorLine2="            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/EffectsFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        cameraController.setImageAnalysisAnalyzer(mainThreadExecutor(),"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/MlKitFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                mainThreadExecutor()"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/MlKitFragment.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Failed to bind use cases.&quot;, exception)"
+        errorLine2="                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Failed to bind use cases.&quot;, exception)"
+        errorLine2="                     ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Failed to bind use cases.&quot;, exception)"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            Logger.e(TAG, &quot;Failed to bind use cases.&quot;, exception)"
+        errorLine2="                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Camera.isUseCasesCombinationSupported can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            camera != null &amp;&amp; camera!!.isUseCasesCombinationSupported(*useCases)"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.directExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                CameraXExecutors.directExecutor(),"
+        errorLine2="                                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.canDeviceWriteToMediaStore can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        return if (canDeviceWriteToMediaStore()) {"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoMediaStoreOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                generateVideoMediaStoreOptions(context.contentResolver, fileName)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoMediaStoreOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                generateVideoMediaStoreOptions(context.contentResolver, fileName)"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoMediaStoreOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                generateVideoMediaStoreOptions(context.contentResolver, fileName)"
+        errorLine2="                                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoFileOutputOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            recorder.prepareRecording(context, generateVideoFileOutputOptions(fileName))"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.generateVideoFileOutputOptions can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            recorder.prepareRecording(context, generateVideoFileOutputOptions(fileName))"
+        errorLine2="                                                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.writeTextToExternalFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        writeTextToExternalFile(information, fileName)"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.writeTextToExternalFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        writeTextToExternalFile(information, fileName)"
+        errorLine2="                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="E2ETestUtil.writeTextToExternalFile can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        writeTextToExternalFile(information, fileName)"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    VideoRecordEvent.Finalize.ERROR_SOURCE_INACTIVE -> Logger.d("
+        errorLine2="                                                                              ~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        TAG,"
+        errorLine2="                        ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.d can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        &quot;Video saved to: $uri&quot;"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                    else -> Logger.e("
+        errorLine2="                                   ~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        TAG,"
+        errorLine2="                        ~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Logger.e can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                        &quot;Failed to save video: uri $uri with code (${event.error})&quot;"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/StreamSharingActivity.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.mainThreadExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="    IMAGE_CAPTURE, mainThreadExecutor(), ToneMappingImageProcessor(), {}"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraEffect.getImageProcessor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        return (imageProcessor as ToneMappingImageProcessor).processoed"
+        errorLine2="                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraEffect.getImageProcessor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        return (imageProcessor as ToneMappingImageProcessor).processoed"
+        errorLine2="                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RgbaImageProxy can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val inputImage = request.inputImage as RgbaImageProxy"
+        errorLine2="                                                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RgbaImageProxy.createBitmap can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            val bitmap = inputImage.createBitmap()"
+        errorLine2="                                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RgbaImageProxy.close can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            inputImage.close()"
+        errorLine2="                       ~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RgbaImageProxy can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            return RgbaImageProxy("
+        errorLine2="                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RgbaImageProxy can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                newBitmap,"
+        errorLine2="                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RgbaImageProxy can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                imageIn.cropRect,"
+        errorLine2="                ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RgbaImageProxy can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="                imageIn.imageInfo.sensorToBufferTransformMatrix,"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingImageEffect.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ShaderProvider can only be accessed from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        private val TONE_MAPPING_SHADER_PROVIDER = object : ShaderProvider {"
+        errorLine2="                                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ShaderProvider.createFragmentShader can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="            override fun createFragmentShader(sampler: String, fragCoords: String): String {"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="    private val glRenderer: OpenGlRenderer = OpenGlRenderer()"
+        errorLine2="                                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.newHandlerExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        glExecutor = newHandlerExecutor(glHandler)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CameraXExecutors.newHandlerExecutor can only be called from within the same library group (referenced groupId=`androidx.camera` from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        glExecutor = newHandlerExecutor(glHandler)"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.init can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="            glRenderer.init(DynamicRange.SDR, TONE_MAPPING_SHADER_PROVIDER)"
+        errorLine2="                       ~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.init can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="            glRenderer.init(DynamicRange.SDR, TONE_MAPPING_SHADER_PROVIDER)"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.init can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="            glRenderer.init(DynamicRange.SDR, TONE_MAPPING_SHADER_PROVIDER)"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.getTextureName can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="        val surfaceTexture = SurfaceTexture(glRenderer.textureName)"
+        errorLine2="                                                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.getTextureName can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="        val surfaceTexture = SurfaceTexture(glRenderer.textureName)"
+        errorLine2="                                                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.unregisterOutputSurface can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="                glRenderer.unregisterOutputSurface(removedSurface)"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.unregisterOutputSurface can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="                glRenderer.unregisterOutputSurface(removedSurface)"
+        errorLine2="                                                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.registerOutputSurface can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="        glRenderer.registerOutputSurface(surface)"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.registerOutputSurface can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="        glRenderer.registerOutputSurface(surface)"
+        errorLine2="                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.release can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="            glRenderer.release()"
+        errorLine2="                       ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.camera.integration-tests`)"
+        errorLine1="        checkState(GL_THREAD_NAME == Thread.currentThread().name)"
+        errorLine2="        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.render can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="            glRenderer.render(surfaceTexture.timestamp, surfaceTransform, surface)"
+        errorLine2="                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.render can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="            glRenderer.render(surfaceTexture.timestamp, surfaceTransform, surface)"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OpenGlRenderer.render can only be called from within the same library (androidx.camera:camera-core)"
+        errorLine1="            glRenderer.render(surfaceTexture.timestamp, surfaceTransform, surface)"
+        errorLine2="                                                                          ~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/integration/view/ToneMappingSurfaceProcessor.kt"/>
+    </issue>
 
     <issue
         id="PermissionImpliesUnsupportedChromeOsHardware"
diff --git a/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt b/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt
index 46fa85f..e5ca0e7 100644
--- a/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt
+++ b/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt
@@ -38,7 +38,6 @@
 import java.util.concurrent.TimeUnit
 import org.junit.After
 import org.junit.Before
-import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -108,7 +107,6 @@
         assertThat(fragment.getSurfaceProcessor().isSurfaceRequestedAndProvided()).isTrue()
     }
 
-    @Ignore("b/285396965")
     @Test
     fun takePicture_imageEffectInvoked() {
         // Arrange.
@@ -121,7 +119,6 @@
         assertThat(fragment.getImageEffect()!!.isInvoked()).isTrue()
     }
 
-    @Ignore("b/285396965")
     @Test
     fun shareToImageCapture_canTakePicture() {
         // Act.
diff --git a/car/app/app-automotive/api/1.4.0-beta02.txt b/car/app/app-automotive/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..33c4502
--- /dev/null
+++ b/car/app/app-automotive/api/1.4.0-beta02.txt
@@ -0,0 +1,101 @@
+// Signature format: 4.0
+package androidx.car.app.activity {
+
+  public abstract class BaseCarAppActivity extends androidx.fragment.app.FragmentActivity implements androidx.lifecycle.LifecycleOwner {
+    ctor public BaseCarAppActivity();
+    method public void bindToViewModel(androidx.car.app.SessionInfo);
+    method public android.content.ComponentName? getServiceComponentName();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public android.content.ComponentName? retrieveServiceComponentName();
+  }
+
+  public final class CarAppActivity extends androidx.car.app.activity.BaseCarAppActivity implements androidx.lifecycle.LifecycleOwner {
+    ctor public CarAppActivity();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class LauncherActivity extends androidx.fragment.app.FragmentActivity implements androidx.lifecycle.LifecycleOwner {
+    ctor public LauncherActivity();
+  }
+
+}
+
+package androidx.car.app.activity.renderer.surface {
+
+  @SuppressCompatibility public final class LegacySurfacePackage {
+    ctor public LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback);
+  }
+
+  public interface SurfaceControlCallback {
+    method public default void onError(String, Throwable);
+    method public void onKeyEvent(android.view.KeyEvent);
+    method public void onTouchEvent(android.view.MotionEvent);
+    method public void onWindowFocusChanged(boolean, boolean);
+    method public void setSurfaceWrapper(androidx.car.app.activity.renderer.surface.SurfaceWrapper);
+  }
+
+  @SuppressCompatibility public final class SurfaceWrapper {
+    ctor public SurfaceWrapper(android.os.IBinder?, @Dimension int, @Dimension int, int, int, android.view.Surface);
+    method public int getDensityDpi();
+    method public int getDisplayId();
+    method @Dimension public int getHeight();
+    method public android.os.IBinder? getHostToken();
+    method public android.view.Surface getSurface();
+    method @Dimension public int getWidth();
+  }
+
+}
+
+package androidx.car.app.hardware {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class AutomotiveCarHardwareManager implements androidx.car.app.hardware.CarHardwareManager {
+    ctor public AutomotiveCarHardwareManager(android.content.Context);
+  }
+
+}
+
+package androidx.car.app.hardware.common {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneAreaIdConstants {
+    field public static final int AREA_ID_GLOBAL = 0; // 0x0
+  }
+
+  public static final class CarZoneAreaIdConstants.VehicleAreaSeat {
+    field public static final int COL_ALL = 1911; // 0x777
+    field public static final int COL_CENTER = 546; // 0x222
+    field public static final int COL_LEFT = 273; // 0x111
+    field public static final int COL_RIGHT = 1092; // 0x444
+    field public static final int ROW_1_CENTER = 2; // 0x2
+    field public static final int ROW_1_LEFT = 1; // 0x1
+    field public static final int ROW_1_RIGHT = 4; // 0x4
+    field public static final int ROW_2_CENTER = 32; // 0x20
+    field public static final int ROW_2_LEFT = 16; // 0x10
+    field public static final int ROW_2_RIGHT = 64; // 0x40
+    field public static final int ROW_3_CENTER = 512; // 0x200
+    field public static final int ROW_3_LEFT = 256; // 0x100
+    field public static final int ROW_3_RIGHT = 1024; // 0x400
+    field public static final int ROW_ALL = 1911; // 0x777
+    field public static final int ROW_FIRST = 7; // 0x7
+    field public static final int ROW_SECOND = 112; // 0x70
+    field public static final int ROW_THIRD = 1792; // 0x700
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public interface CarZoneAreaIdConverter {
+    method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneUtils {
+    method public static com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int, int);
+    method public static androidx.car.app.hardware.common.CarZoneAreaIdConverter getZoneAreaIdConverter(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public class GlobalCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+    ctor public GlobalCarZoneAreaIdConverter();
+    method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public class SeatCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+    ctor public SeatCarZoneAreaIdConverter();
+    method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+  }
+
+}
+
diff --git a/car/app/app-automotive/api/current.ignore b/car/app/app-automotive/api/current.ignore
deleted file mode 100644
index 7a65a46..0000000
--- a/car/app/app-automotive/api/current.ignore
+++ /dev/null
@@ -1,117 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.car.app.activity.BaseCarAppActivity#retrieveServiceComponentName():
-    Removed method androidx.car.app.activity.BaseCarAppActivity.retrieveServiceComponentName() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.LegacySurfacePackage:
-    Removed class androidx.car.app.activity.renderer.surface.LegacySurfacePackage from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.LegacySurfacePackage#LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback):
-    Removed constructor androidx.car.app.activity.renderer.surface.LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.LegacySurfacePackage#LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback) parameter #0:
-    Removed parameter arg1 in androidx.car.app.activity.renderer.surface.LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper:
-    Removed class androidx.car.app.activity.renderer.surface.SurfaceWrapper from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface):
-    Removed constructor androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder,int,int,int,int,android.view.Surface) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #0:
-    Removed parameter arg1 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #1:
-    Removed parameter arg2 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #2:
-    Removed parameter arg3 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #3:
-    Removed parameter arg4 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #4:
-    Removed parameter arg5 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #5:
-    Removed parameter arg6 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getDensityDpi():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getDensityDpi() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getDisplayId():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getDisplayId() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getHeight():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getHeight() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getHostToken():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getHostToken() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getSurface():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getSurface() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getWidth():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getWidth() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.AutomotiveCarHardwareManager:
-    Removed class androidx.car.app.hardware.AutomotiveCarHardwareManager from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.AutomotiveCarHardwareManager#AutomotiveCarHardwareManager(android.content.Context):
-    Removed constructor androidx.car.app.hardware.AutomotiveCarHardwareManager(android.content.Context) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.AutomotiveCarHardwareManager#AutomotiveCarHardwareManager(android.content.Context) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.AutomotiveCarHardwareManager(android.content.Context arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants:
-    Removed class androidx.car.app.hardware.common.CarZoneAreaIdConstants from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants#AREA_ID_GLOBAL:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.AREA_ID_GLOBAL from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat:
-    Removed class androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#COL_ALL:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.COL_ALL from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#COL_CENTER:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.COL_CENTER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#COL_LEFT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.COL_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#COL_RIGHT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.COL_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_1_CENTER:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_1_CENTER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_1_LEFT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_1_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_1_RIGHT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_1_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_2_CENTER:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_2_CENTER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_2_LEFT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_2_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_2_RIGHT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_2_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_3_CENTER:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_3_CENTER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_3_LEFT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_3_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_3_RIGHT:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_3_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_ALL:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_ALL from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_FIRST:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_FIRST from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_SECOND:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_SECOND from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat#ROW_THIRD:
-    Removed field androidx.car.app.hardware.common.CarZoneAreaIdConstants.VehicleAreaSeat.ROW_THIRD from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConverter:
-    Removed class androidx.car.app.hardware.common.CarZoneAreaIdConverter from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConverter#convertAreaIdToCarZones(int):
-    Removed method androidx.car.app.hardware.common.CarZoneAreaIdConverter.convertAreaIdToCarZones(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneAreaIdConverter#convertAreaIdToCarZones(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.common.CarZoneAreaIdConverter.convertAreaIdToCarZones(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneUtils:
-    Removed class androidx.car.app.hardware.common.CarZoneUtils from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneUtils#convertAreaIdToCarZones(int, int):
-    Removed method androidx.car.app.hardware.common.CarZoneUtils.convertAreaIdToCarZones(int,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneUtils#convertAreaIdToCarZones(int, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.common.CarZoneUtils.convertAreaIdToCarZones(int arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneUtils#convertAreaIdToCarZones(int, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.hardware.common.CarZoneUtils.convertAreaIdToCarZones(int arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneUtils#getZoneAreaIdConverter(int):
-    Removed method androidx.car.app.hardware.common.CarZoneUtils.getZoneAreaIdConverter(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarZoneUtils#getZoneAreaIdConverter(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.common.CarZoneUtils.getZoneAreaIdConverter(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter:
-    Removed class androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter#GlobalCarZoneAreaIdConverter():
-    Removed constructor androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter#convertAreaIdToCarZones(int):
-    Removed method androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter.convertAreaIdToCarZones(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter#convertAreaIdToCarZones(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.common.GlobalCarZoneAreaIdConverter.convertAreaIdToCarZones(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter:
-    Removed class androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter#SeatCarZoneAreaIdConverter():
-    Removed constructor androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter#convertAreaIdToCarZones(int):
-    Removed method androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter.convertAreaIdToCarZones(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter#convertAreaIdToCarZones(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.common.SeatCarZoneAreaIdConverter.convertAreaIdToCarZones(int arg1) from compatibility checked API surface
diff --git a/car/app/app-automotive/api/res-1.4.0-beta02.txt b/car/app/app-automotive/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/car/app/app-automotive/api/res-1.4.0-beta02.txt
diff --git a/car/app/app-automotive/api/restricted_1.4.0-beta02.txt b/car/app/app-automotive/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..433cb93
--- /dev/null
+++ b/car/app/app-automotive/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,101 @@
+// Signature format: 4.0
+package androidx.car.app.activity {
+
+  public abstract class BaseCarAppActivity extends androidx.fragment.app.FragmentActivity {
+    ctor public BaseCarAppActivity();
+    method public void bindToViewModel(androidx.car.app.SessionInfo);
+    method public android.content.ComponentName? getServiceComponentName();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public android.content.ComponentName? retrieveServiceComponentName();
+  }
+
+  public final class CarAppActivity extends androidx.car.app.activity.BaseCarAppActivity {
+    ctor public CarAppActivity();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class LauncherActivity extends androidx.fragment.app.FragmentActivity {
+    ctor public LauncherActivity();
+  }
+
+}
+
+package androidx.car.app.activity.renderer.surface {
+
+  @SuppressCompatibility public final class LegacySurfacePackage {
+    ctor public LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback);
+  }
+
+  public interface SurfaceControlCallback {
+    method public default void onError(String, Throwable);
+    method public void onKeyEvent(android.view.KeyEvent);
+    method public void onTouchEvent(android.view.MotionEvent);
+    method public void onWindowFocusChanged(boolean, boolean);
+    method public void setSurfaceWrapper(androidx.car.app.activity.renderer.surface.SurfaceWrapper);
+  }
+
+  @SuppressCompatibility public final class SurfaceWrapper {
+    ctor public SurfaceWrapper(android.os.IBinder?, @Dimension int, @Dimension int, int, int, android.view.Surface);
+    method public int getDensityDpi();
+    method public int getDisplayId();
+    method @Dimension public int getHeight();
+    method public android.os.IBinder? getHostToken();
+    method public android.view.Surface getSurface();
+    method @Dimension public int getWidth();
+  }
+
+}
+
+package androidx.car.app.hardware {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class AutomotiveCarHardwareManager implements androidx.car.app.hardware.CarHardwareManager {
+    ctor public AutomotiveCarHardwareManager(android.content.Context);
+  }
+
+}
+
+package androidx.car.app.hardware.common {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneAreaIdConstants {
+    field public static final int AREA_ID_GLOBAL = 0; // 0x0
+  }
+
+  public static final class CarZoneAreaIdConstants.VehicleAreaSeat {
+    field public static final int COL_ALL = 1911; // 0x777
+    field public static final int COL_CENTER = 546; // 0x222
+    field public static final int COL_LEFT = 273; // 0x111
+    field public static final int COL_RIGHT = 1092; // 0x444
+    field public static final int ROW_1_CENTER = 2; // 0x2
+    field public static final int ROW_1_LEFT = 1; // 0x1
+    field public static final int ROW_1_RIGHT = 4; // 0x4
+    field public static final int ROW_2_CENTER = 32; // 0x20
+    field public static final int ROW_2_LEFT = 16; // 0x10
+    field public static final int ROW_2_RIGHT = 64; // 0x40
+    field public static final int ROW_3_CENTER = 512; // 0x200
+    field public static final int ROW_3_LEFT = 256; // 0x100
+    field public static final int ROW_3_RIGHT = 1024; // 0x400
+    field public static final int ROW_ALL = 1911; // 0x777
+    field public static final int ROW_FIRST = 7; // 0x7
+    field public static final int ROW_SECOND = 112; // 0x70
+    field public static final int ROW_THIRD = 1792; // 0x700
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public interface CarZoneAreaIdConverter {
+    method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneUtils {
+    method public static com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int, int);
+    method public static androidx.car.app.hardware.common.CarZoneAreaIdConverter getZoneAreaIdConverter(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public class GlobalCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+    ctor public GlobalCarZoneAreaIdConverter();
+    method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public class SeatCarZoneAreaIdConverter implements androidx.car.app.hardware.common.CarZoneAreaIdConverter {
+    ctor public SeatCarZoneAreaIdConverter();
+    method public com.google.common.collect.ImmutableSet<androidx.car.app.hardware.common.CarZone!> convertAreaIdToCarZones(int);
+  }
+
+}
+
diff --git a/car/app/app-automotive/api/restricted_current.ignore b/car/app/app-automotive/api/restricted_current.ignore
deleted file mode 100644
index d91212d..0000000
--- a/car/app/app-automotive/api/restricted_current.ignore
+++ /dev/null
@@ -1,35 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.car.app.activity.renderer.surface.LegacySurfacePackage:
-    Removed class androidx.car.app.activity.renderer.surface.LegacySurfacePackage from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.LegacySurfacePackage#LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback):
-    Removed constructor androidx.car.app.activity.renderer.surface.LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.LegacySurfacePackage#LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback) parameter #0:
-    Removed parameter arg1 in androidx.car.app.activity.renderer.surface.LegacySurfacePackage(androidx.car.app.activity.renderer.surface.SurfaceControlCallback arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper:
-    Removed class androidx.car.app.activity.renderer.surface.SurfaceWrapper from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface):
-    Removed constructor androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder,int,int,int,int,android.view.Surface) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #0:
-    Removed parameter arg1 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #1:
-    Removed parameter arg2 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #2:
-    Removed parameter arg3 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #3:
-    Removed parameter arg4 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #4:
-    Removed parameter arg5 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#SurfaceWrapper(android.os.IBinder, int, int, int, int, android.view.Surface) parameter #5:
-    Removed parameter arg6 in androidx.car.app.activity.renderer.surface.SurfaceWrapper(android.os.IBinder arg1, int arg2, int arg3, int arg4, int arg5, android.view.Surface arg6) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getDensityDpi():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getDensityDpi() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getDisplayId():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getDisplayId() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getHeight():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getHeight() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getHostToken():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getHostToken() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getSurface():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getSurface() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.activity.renderer.surface.SurfaceWrapper#getWidth():
-    Removed method androidx.car.app.activity.renderer.surface.SurfaceWrapper.getWidth() from compatibility checked API surface
diff --git a/car/app/app-automotive/lint-baseline.xml b/car/app/app-automotive/lint-baseline.xml
index 11d2c41..5859620 100644
--- a/car/app/app-automotive/lint-baseline.xml
+++ b/car/app/app-automotive/lint-baseline.xml
@@ -1,5 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.car.app`)"
+        errorLine1="            Preconditions.checkState((carPropertyResponse.getStatus() == CarValue.STATUS_SUCCESS"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/car/app/hardware/common/CarPropertyResponse.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.car.app`)"
+        errorLine1="                    &quot;Invalid status and value combo: &quot; + carPropertyResponse);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/car/app/hardware/common/CarPropertyResponse.java"/>
+    </issue>
 
     <issue
         id="UnsafeOptInUsageError"
diff --git a/car/app/app-projected/api/1.4.0-beta02.txt b/car/app/app-projected/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/car/app/app-projected/api/1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/car/app/app-projected/api/res-1.4.0-beta02.txt b/car/app/app-projected/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/car/app/app-projected/api/res-1.4.0-beta02.txt
diff --git a/car/app/app-projected/api/restricted_1.4.0-beta02.txt b/car/app/app-projected/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/car/app/app-projected/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java
index b6f22ed..5affe20 100644
--- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java
@@ -18,7 +18,6 @@
 
 import static androidx.car.app.model.Action.APP_ICON;
 
-import android.annotation.SuppressLint;
 import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
@@ -81,7 +80,6 @@
     @Override
     public Template onGetTemplate() {
         mTabTemplateBuilder = new TabTemplate.Builder(new TabTemplate.TabCallback() {
-            @SuppressLint("SyntheticAccessor")
             @Override
             public void onTabSelected(@NonNull String tabContentId) {
                 mActiveContentId = tabContentId;
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java
index 2c961fd..e695b2e 100644
--- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java
@@ -18,7 +18,6 @@
 
 import static androidx.car.app.model.Action.APP_ICON;
 
-import android.annotation.SuppressLint;
 import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
@@ -66,7 +65,6 @@
     @Override
     public Template onGetTemplate() {
         mTabTemplateBuilder = new TabTemplate.Builder(new TabTemplate.TabCallback() {
-            @SuppressLint("SyntheticAccessor")
             @Override
             public void onTabSelected(@NonNull String tabContentId) {
                 mActiveContentId = tabContentId;
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateNoTabsDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateNoTabsDemoScreen.java
index 38c7368..4c3383c 100644
--- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateNoTabsDemoScreen.java
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateNoTabsDemoScreen.java
@@ -18,7 +18,6 @@
 
 import static androidx.car.app.model.Action.APP_ICON;
 
-import android.annotation.SuppressLint;
 import android.os.Handler;
 
 import androidx.annotation.NonNull;
@@ -42,7 +41,6 @@
     @Override
     public Template onGetTemplate() {
         mTabTemplateBuilder = new TabTemplate.Builder(new TabTemplate.TabCallback() {
-            @SuppressLint("SyntheticAccessor")
             @Override
             public void onTabSelected(@NonNull String tabContentId) {
                 // No-op
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml
index 056b612..8f96acb 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml
@@ -41,7 +41,7 @@
     <string name="ok_action_title" msgid="7128494973966098611">"确定"</string>
     <string name="throw_action_title" msgid="7163710562670220163">"抛出"</string>
     <string name="commute_action_title" msgid="2585755255290185096">"通勤"</string>
-    <string name="sign_out_action_title" msgid="1653943000866713010">"退出帐号"</string>
+    <string name="sign_out_action_title" msgid="1653943000866713010">"退出账号"</string>
     <string name="try_anyway_action_title" msgid="7384500054249311718">"仍然尝试"</string>
     <string name="yes_action_title" msgid="5507096013762092189">"是"</string>
     <string name="no_action_title" msgid="1452124604210014010">"否"</string>
@@ -68,7 +68,7 @@
     <string name="more_toast_msg" msgid="5938288138225509885">"已点击更多"</string>
     <string name="commute_toast_msg" msgid="4112684360647638688">"已按下通勤按钮"</string>
     <string name="grant_location_permission_toast_msg" msgid="268046297444808010">"授予位置信息权限以查看当前位置"</string>
-    <string name="sign_in_with_google_toast_msg" msgid="5720947549233124775">"从此处开始使用 Google 帐号登录"</string>
+    <string name="sign_in_with_google_toast_msg" msgid="5720947549233124775">"从此处开始使用 Google 账号登录"</string>
     <string name="changes_selection_to_index_toast_msg_prefix" msgid="957766225794389167">"选取内容已更改为索引"</string>
     <string name="yes_action_toast_msg" msgid="6216215197177241247">"已按下“是”按钮!"</string>
     <string name="no_action_toast_msg" msgid="6165492423831023809">"已按下“否”按钮!"</string>
@@ -252,7 +252,7 @@
     <string name="password_sign_in_instruction_prefix" msgid="9105788349198243508">"用户名"</string>
     <string name="pin_sign_in_instruction" msgid="2288691296234360441">"在您的手机中输入此 PIN 码"</string>
     <string name="qr_code_sign_in_title" msgid="8137070561006464518">"扫描二维码登录"</string>
-    <string name="sign_in_with_google_title" msgid="8043752000786977249">"使用 Google 帐号登录"</string>
+    <string name="sign_in_with_google_title" msgid="8043752000786977249">"使用 Google 账号登录"</string>
     <string name="provider_sign_in_instruction" msgid="7586815688292506743">"使用此按钮完成 Google 登录"</string>
     <string name="sign_in_complete_text" msgid="8423984266325680606">"您已登录!"</string>
     <string name="sign_in_complete_title" msgid="8919868148773983428">"已完成登录"</string>
diff --git a/car/app/app-testing/api/1.4.0-beta02.txt b/car/app/app-testing/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..57cf025
--- /dev/null
+++ b/car/app/app-testing/api/1.4.0-beta02.txt
@@ -0,0 +1,66 @@
+// Signature format: 4.0
+package androidx.car.app.testing {
+
+  public class FakeHost {
+    method public void performNotificationActionClick(android.app.PendingIntent);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public void setMicrophoneInputData(java.io.InputStream);
+  }
+
+  public class ScreenController {
+    ctor public ScreenController(androidx.car.app.Screen);
+    method public androidx.car.app.Screen getScreen();
+    method public Object? getScreenResult();
+    method public java.util.List<androidx.car.app.model.Template!> getTemplatesReturned();
+    method public androidx.car.app.testing.ScreenController moveToState(androidx.lifecycle.Lifecycle.State);
+    method public void reset();
+  }
+
+  public class SessionController {
+    ctor public SessionController(androidx.car.app.Session, androidx.car.app.testing.TestCarContext, android.content.Intent);
+    method public androidx.car.app.Session getSession();
+    method public androidx.car.app.testing.SessionController moveToState(androidx.lifecycle.Lifecycle.State);
+  }
+
+  public class TestAppManager extends androidx.car.app.AppManager {
+    method public androidx.car.app.SurfaceCallback? getSurfaceCallback();
+    method public java.util.List<android.util.Pair<androidx.car.app.Screen!,androidx.car.app.model.Template!>!> getTemplatesReturned();
+    method public java.util.List<java.lang.CharSequence!> getToastsShown();
+    method public void reset();
+  }
+
+  public class TestCarContext extends androidx.car.app.CarContext {
+    method public static androidx.car.app.testing.TestCarContext createCarContext(android.content.Context);
+    method public androidx.car.app.testing.FakeHost getFakeHost();
+    method public androidx.car.app.testing.TestCarContext.PermissionRequestInfo? getLastPermissionRequestInfo();
+    method public java.util.List<android.content.Intent!> getStartCarAppIntents();
+    method public boolean hasCalledFinishCarApp();
+    method public void reset();
+  }
+
+  public static class TestCarContext.PermissionRequestInfo {
+    method public androidx.car.app.OnRequestPermissionsListener getListener();
+    method public java.util.List<java.lang.String!> getPermissionsRequested();
+  }
+
+  public class TestScreenManager extends androidx.car.app.ScreenManager {
+    method public java.util.List<androidx.car.app.Screen!> getScreensPushed();
+    method public java.util.List<androidx.car.app.Screen!> getScreensRemoved();
+    method public boolean hasScreens();
+    method public void reset();
+  }
+
+}
+
+package androidx.car.app.testing.navigation {
+
+  public class TestNavigationManager extends androidx.car.app.navigation.NavigationManager {
+    ctor public TestNavigationManager(androidx.car.app.testing.TestCarContext, androidx.car.app.HostDispatcher);
+    method public int getNavigationEndedCount();
+    method public androidx.car.app.navigation.NavigationManagerCallback? getNavigationManagerCallback();
+    method public int getNavigationStartedCount();
+    method public java.util.List<androidx.car.app.navigation.model.Trip!> getTripsSent();
+    method public void reset();
+  }
+
+}
+
diff --git a/car/app/app-testing/api/current.ignore b/car/app/app-testing/api/current.ignore
deleted file mode 100644
index 95de15d..0000000
--- a/car/app/app-testing/api/current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.car.app.testing.FakeHost#setMicrophoneInputData(java.io.InputStream):
-    Removed method androidx.car.app.testing.FakeHost.setMicrophoneInputData(java.io.InputStream) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.testing.FakeHost#setMicrophoneInputData(java.io.InputStream) parameter #0:
-    Removed parameter arg1 in androidx.car.app.testing.FakeHost.setMicrophoneInputData(java.io.InputStream arg1) from compatibility checked API surface
diff --git a/car/app/app-testing/api/res-1.4.0-beta02.txt b/car/app/app-testing/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/car/app/app-testing/api/res-1.4.0-beta02.txt
diff --git a/car/app/app-testing/api/restricted_1.4.0-beta02.txt b/car/app/app-testing/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..57cf025
--- /dev/null
+++ b/car/app/app-testing/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,66 @@
+// Signature format: 4.0
+package androidx.car.app.testing {
+
+  public class FakeHost {
+    method public void performNotificationActionClick(android.app.PendingIntent);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public void setMicrophoneInputData(java.io.InputStream);
+  }
+
+  public class ScreenController {
+    ctor public ScreenController(androidx.car.app.Screen);
+    method public androidx.car.app.Screen getScreen();
+    method public Object? getScreenResult();
+    method public java.util.List<androidx.car.app.model.Template!> getTemplatesReturned();
+    method public androidx.car.app.testing.ScreenController moveToState(androidx.lifecycle.Lifecycle.State);
+    method public void reset();
+  }
+
+  public class SessionController {
+    ctor public SessionController(androidx.car.app.Session, androidx.car.app.testing.TestCarContext, android.content.Intent);
+    method public androidx.car.app.Session getSession();
+    method public androidx.car.app.testing.SessionController moveToState(androidx.lifecycle.Lifecycle.State);
+  }
+
+  public class TestAppManager extends androidx.car.app.AppManager {
+    method public androidx.car.app.SurfaceCallback? getSurfaceCallback();
+    method public java.util.List<android.util.Pair<androidx.car.app.Screen!,androidx.car.app.model.Template!>!> getTemplatesReturned();
+    method public java.util.List<java.lang.CharSequence!> getToastsShown();
+    method public void reset();
+  }
+
+  public class TestCarContext extends androidx.car.app.CarContext {
+    method public static androidx.car.app.testing.TestCarContext createCarContext(android.content.Context);
+    method public androidx.car.app.testing.FakeHost getFakeHost();
+    method public androidx.car.app.testing.TestCarContext.PermissionRequestInfo? getLastPermissionRequestInfo();
+    method public java.util.List<android.content.Intent!> getStartCarAppIntents();
+    method public boolean hasCalledFinishCarApp();
+    method public void reset();
+  }
+
+  public static class TestCarContext.PermissionRequestInfo {
+    method public androidx.car.app.OnRequestPermissionsListener getListener();
+    method public java.util.List<java.lang.String!> getPermissionsRequested();
+  }
+
+  public class TestScreenManager extends androidx.car.app.ScreenManager {
+    method public java.util.List<androidx.car.app.Screen!> getScreensPushed();
+    method public java.util.List<androidx.car.app.Screen!> getScreensRemoved();
+    method public boolean hasScreens();
+    method public void reset();
+  }
+
+}
+
+package androidx.car.app.testing.navigation {
+
+  public class TestNavigationManager extends androidx.car.app.navigation.NavigationManager {
+    ctor public TestNavigationManager(androidx.car.app.testing.TestCarContext, androidx.car.app.HostDispatcher);
+    method public int getNavigationEndedCount();
+    method public androidx.car.app.navigation.NavigationManagerCallback? getNavigationManagerCallback();
+    method public int getNavigationStartedCount();
+    method public java.util.List<androidx.car.app.navigation.model.Trip!> getTripsSent();
+    method public void reset();
+  }
+
+}
+
diff --git a/car/app/app/api/1.4.0-beta02.txt b/car/app/app/api/1.4.0-beta02.txt
new file mode 100644
index 0000000..73c12de
--- /dev/null
+++ b/car/app/app/api/1.4.0-beta02.txt
@@ -0,0 +1,2210 @@
+// Signature format: 4.0
+package androidx.car.app {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class AppInfo {
+    ctor @VisibleForTesting public AppInfo(int, int, String);
+    method public int getLatestCarAppApiLevel();
+    method public String getLibraryDisplayVersion();
+    method public int getMinCarAppApiLevel();
+    field public static final String MIN_API_LEVEL_METADATA_KEY = "androidx.car.app.minCarApiLevel";
+  }
+
+  public class AppManager implements androidx.car.app.managers.Manager {
+    method @androidx.car.app.annotations.RequiresCarApi(5) public void dismissAlert(int);
+    method public void invalidate();
+    method public void setSurfaceCallback(androidx.car.app.SurfaceCallback?);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public void showAlert(androidx.car.app.model.Alert);
+    method public void showToast(CharSequence, int);
+  }
+
+  public final class CarAppPermission {
+    method public static void checkHasLibraryPermission(android.content.Context, String);
+    method public static void checkHasPermission(android.content.Context, String);
+    field public static final String ACCESS_SURFACE = "androidx.car.app.ACCESS_SURFACE";
+    field public static final String MAP_TEMPLATES = "androidx.car.app.MAP_TEMPLATES";
+    field public static final String NAVIGATION_TEMPLATES = "androidx.car.app.NAVIGATION_TEMPLATES";
+  }
+
+  public abstract class CarAppService extends android.app.Service {
+    ctor public CarAppService();
+    method public abstract androidx.car.app.validation.HostValidator createHostValidator();
+    method @CallSuper public final void dump(java.io.FileDescriptor, java.io.PrintWriter, String![]?);
+    method @Deprecated public final androidx.car.app.Session? getCurrentSession();
+    method public final androidx.car.app.HostInfo? getHostInfo();
+    method public final androidx.car.app.Session? getSession(androidx.car.app.SessionInfo);
+    method @CallSuper public final android.os.IBinder onBind(android.content.Intent);
+    method public androidx.car.app.Session onCreateSession();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.Session onCreateSession(androidx.car.app.SessionInfo);
+    method public final boolean onUnbind(android.content.Intent);
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_CALLING_APP = "androidx.car.app.category.CALLING";
+    field @Deprecated public static final String CATEGORY_CHARGING_APP = "androidx.car.app.category.CHARGING";
+    field @androidx.car.app.annotations.RequiresCarApi(6) public static final String CATEGORY_FEATURE_CLUSTER = "androidx.car.app.category.FEATURE_CLUSTER";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_IOT_APP = "androidx.car.app.category.IOT";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_MESSAGING_APP = "androidx.car.app.category.MESSAGING";
+    field public static final String CATEGORY_NAVIGATION_APP = "androidx.car.app.category.NAVIGATION";
+    field @Deprecated public static final String CATEGORY_PARKING_APP = "androidx.car.app.category.PARKING";
+    field public static final String CATEGORY_POI_APP = "androidx.car.app.category.POI";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_SETTINGS_APP = "androidx.car.app.category.SETTINGS";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_WEATHER_APP = "androidx.car.app.category.WEATHER";
+    field public static final String SERVICE_INTERFACE = "androidx.car.app.CarAppService";
+  }
+
+  public class CarContext extends android.content.ContextWrapper {
+    method public void finishCarApp();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public android.content.ComponentName? getCallingComponent();
+    method public int getCarAppApiLevel();
+    method public <T> T getCarService(Class<T!>);
+    method public Object getCarService(String);
+    method public String getCarServiceName(Class<?>);
+    method public androidx.car.app.HostInfo? getHostInfo();
+    method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method public boolean isDarkMode();
+    method public void requestPermissions(java.util.List<java.lang.String!>, androidx.car.app.OnRequestPermissionsListener);
+    method public void requestPermissions(java.util.List<java.lang.String!>, java.util.concurrent.Executor, androidx.car.app.OnRequestPermissionsListener);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public void setCarAppResult(int, android.content.Intent?);
+    method public void startCarApp(android.content.Intent);
+    method @Deprecated public static void startCarApp(android.content.Intent, android.content.Intent);
+    field public static final String ACTION_NAVIGATE = "androidx.car.app.action.NAVIGATE";
+    field public static final String APP_SERVICE = "app";
+    field public static final String CAR_SERVICE = "car";
+    field @androidx.car.app.annotations.RequiresCarApi(2) public static final String CONSTRAINT_SERVICE = "constraints";
+    field public static final String EXTRA_START_CAR_APP_BINDER_KEY = "androidx.car.app.extra.START_CAR_APP_BINDER_KEY";
+    field @androidx.car.app.annotations.RequiresCarApi(3) public static final String HARDWARE_SERVICE = "hardware";
+    field public static final String NAVIGATION_SERVICE = "navigation";
+    field public static final String SCREEN_SERVICE = "screen";
+    field public static final String SUGGESTION_SERVICE = "suggestion";
+  }
+
+  public final class CarToast {
+    method public static androidx.car.app.CarToast makeText(androidx.car.app.CarContext, @StringRes int, int);
+    method public static androidx.car.app.CarToast makeText(androidx.car.app.CarContext, CharSequence, int);
+    method public void setDuration(int);
+    method public void setText(@StringRes int);
+    method public void setText(CharSequence);
+    method public void show();
+    field public static final int LENGTH_LONG = 1; // 0x1
+    field public static final int LENGTH_SHORT = 0; // 0x0
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class FailureResponse {
+    ctor public FailureResponse(Throwable);
+    method public int getErrorType();
+    method public String getStackTrace();
+    field public static final int BUNDLER_EXCEPTION = 1; // 0x1
+    field public static final int ILLEGAL_STATE_EXCEPTION = 2; // 0x2
+    field public static final int INVALID_PARAMETER_EXCEPTION = 3; // 0x3
+    field public static final int REMOTE_EXCEPTION = 6; // 0x6
+    field public static final int RUNTIME_EXCEPTION = 5; // 0x5
+    field public static final int SECURITY_EXCEPTION = 4; // 0x4
+    field public static final int UNKNOWN_ERROR = 0; // 0x0
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class HandshakeInfo {
+    ctor public HandshakeInfo(String, int);
+    method public int getHostCarAppApiLevel();
+    method public String getHostPackageName();
+  }
+
+  public final class HostException extends java.lang.RuntimeException {
+    ctor public HostException(String);
+    ctor public HostException(String, Throwable);
+    ctor public HostException(Throwable);
+  }
+
+  public final class HostInfo {
+    ctor public HostInfo(String, int);
+    method public String getPackageName();
+    method public int getUid();
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnDoneCallback {
+    method public default void onFailure(androidx.car.app.serialization.Bundleable);
+    method public default void onSuccess(androidx.car.app.serialization.Bundleable?);
+  }
+
+  public interface OnRequestPermissionsListener {
+    method public void onRequestPermissionsResult(java.util.List<java.lang.String!>, java.util.List<java.lang.String!>);
+  }
+
+  public interface OnScreenResultListener {
+    method public void onScreenResult(Object?);
+  }
+
+  public abstract class Screen implements androidx.lifecycle.LifecycleOwner {
+    ctor protected Screen(androidx.car.app.CarContext);
+    method public final void finish();
+    method public final androidx.car.app.CarContext getCarContext();
+    method public final androidx.lifecycle.Lifecycle getLifecycle();
+    method public String? getMarker();
+    method public final androidx.car.app.ScreenManager getScreenManager();
+    method public final void invalidate();
+    method public abstract androidx.car.app.model.Template onGetTemplate();
+    method public void setMarker(String?);
+    method public void setResult(Object?);
+  }
+
+  @MainThread public class ScreenManager implements androidx.car.app.managers.Manager {
+    method public java.util.Collection<androidx.car.app.Screen!> getScreenStack();
+    method public int getStackSize();
+    method public androidx.car.app.Screen getTop();
+    method public void pop();
+    method public void popTo(String);
+    method public void popToRoot();
+    method public void push(androidx.car.app.Screen);
+    method public void pushForResult(androidx.car.app.Screen, androidx.car.app.OnScreenResultListener);
+    method public void remove(androidx.car.app.Screen);
+  }
+
+  public abstract class Session implements androidx.lifecycle.LifecycleOwner {
+    ctor public Session();
+    method public final androidx.car.app.CarContext getCarContext();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method public void onCarConfigurationChanged(android.content.res.Configuration);
+    method public abstract androidx.car.app.Screen onCreateScreen(android.content.Intent);
+    method public void onNewIntent(android.content.Intent);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class SessionInfo {
+    ctor public SessionInfo(int, String);
+    method public int getDisplayType();
+    method public String getSessionId();
+    method public java.util.Set<java.lang.Class<? extends androidx.car.app.model.Template>!>? getSupportedTemplates(int);
+    field public static final androidx.car.app.SessionInfo DEFAULT_SESSION_INFO;
+    field public static final int DISPLAY_TYPE_CLUSTER = 1; // 0x1
+    field public static final int DISPLAY_TYPE_MAIN = 0; // 0x0
+  }
+
+  public class SessionInfoIntentEncoder {
+    method public static boolean containsSessionInfo(android.content.Intent);
+    method public static androidx.car.app.SessionInfo decode(android.content.Intent);
+    method public static void encode(androidx.car.app.SessionInfo, android.content.Intent);
+  }
+
+  public interface SurfaceCallback {
+    method @androidx.car.app.annotations.RequiresCarApi(5) public default void onClick(float, float);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public default void onFling(float, float);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public default void onScale(float, float, float);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public default void onScroll(float, float);
+    method public default void onStableAreaChanged(android.graphics.Rect);
+    method public default void onSurfaceAvailable(androidx.car.app.SurfaceContainer);
+    method public default void onSurfaceDestroyed(androidx.car.app.SurfaceContainer);
+    method public default void onVisibleAreaChanged(android.graphics.Rect);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class SurfaceContainer {
+    ctor public SurfaceContainer(android.view.Surface?, int, int, int);
+    method public int getDpi();
+    method public int getHeight();
+    method public android.view.Surface? getSurface();
+    method public int getWidth();
+  }
+
+}
+
+package androidx.car.app.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface CarProtocol {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface ExperimentalCarApi {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface RequiresCarApi {
+    method public abstract int value();
+  }
+
+}
+
+package androidx.car.app.connection {
+
+  public final class CarConnection {
+    ctor @MainThread public CarConnection(android.content.Context);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getType();
+    field public static final String ACTION_CAR_CONNECTION_UPDATED = "androidx.car.app.connection.action.CAR_CONNECTION_UPDATED";
+    field public static final String CAR_CONNECTION_STATE = "CarConnectionState";
+    field public static final int CONNECTION_TYPE_NATIVE = 1; // 0x1
+    field public static final int CONNECTION_TYPE_NOT_CONNECTED = 0; // 0x0
+    field public static final int CONNECTION_TYPE_PROJECTION = 2; // 0x2
+  }
+
+}
+
+package androidx.car.app.constraints {
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public class ConstraintManager implements androidx.car.app.managers.Manager {
+    method public int getContentLimit(int);
+    method @androidx.car.app.annotations.RequiresCarApi(6) public boolean isAppDrivenRefreshEnabled();
+    field public static final int CONTENT_LIMIT_TYPE_GRID = 1; // 0x1
+    field public static final int CONTENT_LIMIT_TYPE_LIST = 0; // 0x0
+    field public static final int CONTENT_LIMIT_TYPE_PANE = 4; // 0x4
+    field public static final int CONTENT_LIMIT_TYPE_PLACE_LIST = 2; // 0x2
+    field public static final int CONTENT_LIMIT_TYPE_ROUTE_LIST = 3; // 0x3
+  }
+
+}
+
+package androidx.car.app.hardware {
+
+  @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarHardwareManager extends androidx.car.app.managers.Manager {
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public default androidx.car.app.hardware.climate.CarClimate getCarClimate();
+    method public default androidx.car.app.hardware.info.CarInfo getCarInfo();
+    method public default androidx.car.app.hardware.info.CarSensors getCarSensors();
+  }
+
+}
+
+package androidx.car.app.hardware.climate {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CabinTemperatureProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!> getCarZoneSetsToCabinCelsiusTemperatureRanges();
+    method public float getCelsiusSupportedIncrement();
+    method public float getFahrenheitSupportedIncrement();
+    method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxCelsiusRange();
+    method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxFahrenheitRange();
+    method public boolean hasCarZoneSetsToCabinCelsiusTemperatureRanges();
+    method public boolean hasCelsiusSupportedIncrement();
+    method public boolean hasFahrenheitSupportedIncrement();
+    method public boolean hasSupportedMinMaxCelsiusRange();
+    method public boolean hasSupportedMinMaxFahrenheitRange();
+  }
+
+  public static final class CabinTemperatureProfile.Builder {
+    ctor public CabinTemperatureProfile.Builder();
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile build();
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCarZoneSetsToCabinCelsiusTemperatureRanges(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!>);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCelsiusSupportedIncrement(float);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setFahrenheitSupportedIncrement(float);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxCelsiusRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxFahrenheitRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+  }
+
+  @SuppressCompatibility @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimate {
+    method public void fetchClimateProfile(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateProfileRequest, androidx.car.app.hardware.climate.CarClimateProfileCallback);
+    method public void registerClimateStateCallback(java.util.concurrent.Executor, androidx.car.app.hardware.climate.RegisterClimateStateRequest, androidx.car.app.hardware.climate.CarClimateStateCallback);
+    method public <E> void setClimateState(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateStateRequest<E!>, androidx.car.app.hardware.common.CarSetOperationStatusCallback);
+    method public void unregisterClimateStateCallback(androidx.car.app.hardware.climate.CarClimateStateCallback);
+  }
+
+  @SuppressCompatibility @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarClimateFeature {
+    method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+    method public int getFeature();
+  }
+
+  public static final class CarClimateFeature.Builder {
+    ctor public CarClimateFeature.Builder(int);
+    method public androidx.car.app.hardware.climate.CarClimateFeature.Builder addCarZones(androidx.car.app.hardware.common.CarZone!...);
+    method public androidx.car.app.hardware.climate.CarClimateFeature build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateProfileCallback {
+    method public default void onCabinTemperatureProfileAvailable(androidx.car.app.hardware.climate.CabinTemperatureProfile);
+    method public default void onCarZoneMappingInfoProfileAvailable(androidx.car.app.hardware.climate.CarZoneMappingInfoProfile);
+    method public default void onDefrosterProfileAvailable(androidx.car.app.hardware.climate.DefrosterProfile);
+    method public default void onElectricDefrosterProfileAvailable(androidx.car.app.hardware.climate.ElectricDefrosterProfile);
+    method public default void onFanDirectionProfileAvailable(androidx.car.app.hardware.climate.FanDirectionProfile);
+    method public default void onFanSpeedLevelProfileAvailable(androidx.car.app.hardware.climate.FanSpeedLevelProfile);
+    method public default void onHvacAcProfileAvailable(androidx.car.app.hardware.climate.HvacAcProfile);
+    method public default void onHvacAutoModeProfileAvailable(androidx.car.app.hardware.climate.HvacAutoModeProfile);
+    method public default void onHvacAutoRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacAutoRecirculationProfile);
+    method public default void onHvacDualModeProfileAvailable(androidx.car.app.hardware.climate.HvacDualModeProfile);
+    method public default void onHvacMaxAcModeProfileAvailable(androidx.car.app.hardware.climate.HvacMaxAcModeProfile);
+    method public default void onHvacPowerProfileAvailable(androidx.car.app.hardware.climate.HvacPowerProfile);
+    method public default void onHvacRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacRecirculationProfile);
+    method public default void onMaxDefrosterProfileAvailable(androidx.car.app.hardware.climate.MaxDefrosterProfile);
+    method public default void onSeatTemperatureLevelProfileAvailable(androidx.car.app.hardware.climate.SeatTemperatureProfile);
+    method public default void onSeatVentilationLevelProfileAvailable(androidx.car.app.hardware.climate.SeatVentilationProfile);
+    method public default void onSteeringWheelHeatProfileAvailable(androidx.car.app.hardware.climate.SteeringWheelHeatProfile);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateStateCallback {
+    method public default void onCabinTemperatureStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public default void onDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onElectricDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onFanDirectionStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onFanSpeedLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onHvacAcStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacAutoModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacAutoRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacDualModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacMaxAcModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacPowerStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onMaxDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onSeatTemperatureLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onSeatVentilationLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onSteeringWheelHeatStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneMappingInfoProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class CarZoneMappingInfoProfile.Builder {
+    ctor public CarZoneMappingInfoProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.CarZoneMappingInfoProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateProfileRequest {
+    method public java.util.Set<java.lang.Integer!> getAllClimateProfiles();
+    method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateProfileFeatures();
+    field public static final int FEATURE_CABIN_TEMPERATURE = 4; // 0x4
+    field public static final int FEATURE_CAR_ZONE_MAPPING = 17; // 0x11
+    field public static final int FEATURE_FAN_DIRECTION = 6; // 0x6
+    field public static final int FEATURE_FAN_SPEED = 5; // 0x5
+    field public static final int FEATURE_HVAC_AC = 2; // 0x2
+    field public static final int FEATURE_HVAC_AUTO_MODE = 12; // 0xc
+    field public static final int FEATURE_HVAC_AUTO_RECIRCULATION = 11; // 0xb
+    field public static final int FEATURE_HVAC_DEFROSTER = 14; // 0xe
+    field public static final int FEATURE_HVAC_DUAL_MODE = 13; // 0xd
+    field public static final int FEATURE_HVAC_ELECTRIC_DEFROSTER = 16; // 0x10
+    field public static final int FEATURE_HVAC_MAX_AC = 3; // 0x3
+    field public static final int FEATURE_HVAC_MAX_DEFROSTER = 15; // 0xf
+    field public static final int FEATURE_HVAC_POWER = 1; // 0x1
+    field public static final int FEATURE_HVAC_RECIRCULATION = 10; // 0xa
+    field public static final int FEATURE_SEAT_TEMPERATURE_LEVEL = 7; // 0x7
+    field public static final int FEATURE_SEAT_VENTILATION_LEVEL = 8; // 0x8
+    field public static final int FEATURE_STEERING_WHEEL_HEAT = 9; // 0x9
+  }
+
+  public static final class ClimateProfileRequest.Builder {
+    ctor public ClimateProfileRequest.Builder();
+    method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder addClimateProfileFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+    method public androidx.car.app.hardware.climate.ClimateProfileRequest build();
+    method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder setAllClimateProfiles();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateStateRequest<T> {
+    method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+    method public int getRequestedFeature();
+    method public T getRequestedValue();
+  }
+
+  public static final class ClimateStateRequest.Builder<T> {
+    ctor public ClimateStateRequest.Builder(int, T!);
+    method public androidx.car.app.hardware.climate.ClimateStateRequest.Builder<T!> addCarZones(androidx.car.app.hardware.common.CarZone);
+    method public androidx.car.app.hardware.climate.ClimateStateRequest<T!> build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class DefrosterProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class DefrosterProfile.Builder {
+    ctor public DefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.DefrosterProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class ElectricDefrosterProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class ElectricDefrosterProfile.Builder {
+    ctor public ElectricDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.ElectricDefrosterProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class FanDirectionProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!> getCarZoneSetsToFanDirectionValues();
+  }
+
+  public static final class FanDirectionProfile.Builder {
+    ctor public FanDirectionProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.FanDirectionProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class FanSpeedLevelProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToFanSpeedLevelRanges();
+  }
+
+  public static final class FanSpeedLevelProfile.Builder {
+    ctor public FanSpeedLevelProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.FanSpeedLevelProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAcProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacAcProfile.Builder {
+    ctor public HvacAcProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacAcProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoModeProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacAutoModeProfile.Builder {
+    ctor public HvacAutoModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacAutoModeProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoRecirculationProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacAutoRecirculationProfile.Builder {
+    ctor public HvacAutoRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacAutoRecirculationProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacDualModeProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacDualModeProfile.Builder {
+    ctor public HvacDualModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacDualModeProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacMaxAcModeProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacMaxAcModeProfile.Builder {
+    ctor public HvacMaxAcModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacMaxAcModeProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacPowerProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacPowerProfile.Builder {
+    ctor public HvacPowerProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacPowerProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacRecirculationProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZones();
+  }
+
+  public static final class HvacRecirculationProfile.Builder {
+    ctor public HvacRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacRecirculationProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class MaxDefrosterProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class MaxDefrosterProfile.Builder {
+    ctor public MaxDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.MaxDefrosterProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class RegisterClimateStateRequest {
+    method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateRegisterFeatures();
+  }
+
+  public static final class RegisterClimateStateRequest.Builder {
+    ctor public RegisterClimateStateRequest.Builder(boolean);
+    method public androidx.car.app.hardware.climate.RegisterClimateStateRequest.Builder addClimateRegisterFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+    method public androidx.car.app.hardware.climate.RegisterClimateStateRequest build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class SeatTemperatureProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatTemperatureValues();
+  }
+
+  public static final class SeatTemperatureProfile.Builder {
+    ctor public SeatTemperatureProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.SeatTemperatureProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class SeatVentilationProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatVentilationValues();
+  }
+
+  public static final class SeatVentilationProfile.Builder {
+    ctor public SeatVentilationProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.SeatVentilationProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class SteeringWheelHeatProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSteeringWheelHeatValues();
+  }
+
+  public static final class SteeringWheelHeatProfile.Builder {
+    ctor public SteeringWheelHeatProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.SteeringWheelHeatProfile build();
+  }
+
+}
+
+package androidx.car.app.hardware.common {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarSetOperationStatusCallback {
+    method public default void onSetCarClimateStateCabinTemperature(int);
+    method public default void onSetCarClimateStateDefroster(int);
+    method public default void onSetCarClimateStateElectricDefroster(int);
+    method public default void onSetCarClimateStateFanDirection(int);
+    method public default void onSetCarClimateStateFanSpeedLevel(int);
+    method public default void onSetCarClimateStateHvacAc(int);
+    method public default void onSetCarClimateStateHvacAutoMode(int);
+    method public default void onSetCarClimateStateHvacAutoRecirculation(int);
+    method public default void onSetCarClimateStateHvacDualMode(int);
+    method public default void onSetCarClimateStateHvacMaxAcMode(int);
+    method public default void onSetCarClimateStateHvacPower(int);
+    method public default void onSetCarClimateStateHvacRecirculation(int);
+    method public default void onSetCarClimateStateMaxDefroster(int);
+    method public default void onSetCarClimateStateSeatTemperatureLevel(int);
+    method public default void onSetCarClimateStateSeatVentilationLevel(int);
+    method public default void onSetCarClimateStateSteeringWheelHeat(int);
+    method public static String toString(int);
+    field public static final int OPERATION_STATUS_FEATURE_SETTING_NOT_ALLOWED = 4; // 0x4
+    field public static final int OPERATION_STATUS_FEATURE_TEMPORARILY_UNAVAILABLE = 3; // 0x3
+    field public static final int OPERATION_STATUS_FEATURE_UNIMPLEMENTED = 1; // 0x1
+    field public static final int OPERATION_STATUS_FEATURE_UNSUPPORTED = 2; // 0x2
+    field public static final int OPERATION_STATUS_ILLEGAL_CAR_HARDWARE_STATE = 7; // 0x7
+    field public static final int OPERATION_STATUS_INSUFFICIENT_PERMISSION = 6; // 0x6
+    field public static final int OPERATION_STATUS_SUCCESS = 0; // 0x0
+    field public static final int OPERATION_STATUS_UNSUPPORTED_VALUE = 5; // 0x5
+    field public static final int OPERATION_STATUS_UPDATE_TIMEOUT = 8; // 0x8
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarUnit {
+    method public static String toString(int);
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int IMPERIAL_GALLON = 204; // 0xcc
+    field public static final int KILOMETER = 3; // 0x3
+    field public static final int KILOMETERS_PER_HOUR = 102; // 0x66
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int LITER = 202; // 0xca
+    field public static final int METER = 2; // 0x2
+    field public static final int METERS_PER_SEC = 101; // 0x65
+    field public static final int MILE = 4; // 0x4
+    field public static final int MILES_PER_HOUR = 103; // 0x67
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int MILLILITER = 201; // 0xc9
+    field public static final int MILLIMETER = 1; // 0x1
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int US_GALLON = 203; // 0xcb
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarValue<T> {
+    ctor public CarValue(T?, long, int);
+    ctor @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public CarValue(T?, long, int, java.util.List<androidx.car.app.hardware.common.CarZone!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+    method public int getStatus();
+    method public long getTimestampMillis();
+    method public T? getValue();
+    field public static final int STATUS_SUCCESS = 1; // 0x1
+    field public static final int STATUS_UNAVAILABLE = 3; // 0x3
+    field public static final int STATUS_UNIMPLEMENTED = 2; // 0x2
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarZone {
+    method public int getColumn();
+    method public int getRow();
+    field public static final int CAR_ZONE_COLUMN_ALL = 16; // 0x10
+    field public static final int CAR_ZONE_COLUMN_CENTER = 48; // 0x30
+    field public static final int CAR_ZONE_COLUMN_DRIVER = 80; // 0x50
+    field public static final int CAR_ZONE_COLUMN_LEFT = 32; // 0x20
+    field public static final int CAR_ZONE_COLUMN_PASSENGER = 96; // 0x60
+    field public static final int CAR_ZONE_COLUMN_RIGHT = 64; // 0x40
+    field public static final androidx.car.app.hardware.common.CarZone CAR_ZONE_GLOBAL;
+    field public static final int CAR_ZONE_ROW_ALL = 0; // 0x0
+    field public static final int CAR_ZONE_ROW_EXCLUDE_FIRST = 4; // 0x4
+    field public static final int CAR_ZONE_ROW_FIRST = 1; // 0x1
+    field public static final int CAR_ZONE_ROW_SECOND = 2; // 0x2
+    field public static final int CAR_ZONE_ROW_THIRD = 3; // 0x3
+  }
+
+  public static final class CarZone.Builder {
+    ctor public CarZone.Builder();
+    method public androidx.car.app.hardware.common.CarZone build();
+    method public androidx.car.app.hardware.common.CarZone.Builder setColumn(int);
+    method public androidx.car.app.hardware.common.CarZone.Builder setRow(int);
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public interface OnCarDataAvailableListener<T> {
+    method public void onCarDataAvailable(T);
+  }
+
+}
+
+package androidx.car.app.hardware.info {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Accelerometer {
+    ctor public Accelerometer(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getForces();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarHardwareLocation {
+    ctor public CarHardwareLocation(androidx.car.app.hardware.common.CarValue<android.location.Location!>);
+    method public androidx.car.app.hardware.common.CarValue<android.location.Location!> getLocation();
+  }
+
+  @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarInfo {
+    method public void addEnergyLevelListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public void addEvStatusListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
+    method public void addMileageListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
+    method public void addSpeedListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
+    method public void addTollListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
+    method public void fetchEnergyProfile(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyProfile!>);
+    method public void fetchModel(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Model!>);
+    method public void removeEnergyLevelListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public void removeEvStatusListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
+    method public void removeMileageListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
+    method public void removeSpeedListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
+    method public void removeTollListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
+  }
+
+  @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarSensors {
+    method public void addAccelerometerListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Accelerometer!>);
+    method public void addCarHardwareLocationListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.CarHardwareLocation!>);
+    method public void addCompassListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Compass!>);
+    method public void addGyroscopeListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Gyroscope!>);
+    method public void removeAccelerometerListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Accelerometer!>);
+    method public void removeCarHardwareLocationListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.CarHardwareLocation!>);
+    method public void removeCompassListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Compass!>);
+    method public void removeGyroscopeListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Gyroscope!>);
+    field public static final int UPDATE_RATE_FASTEST = 3; // 0x3
+    field public static final int UPDATE_RATE_NORMAL = 1; // 0x1
+    field public static final int UPDATE_RATE_UI = 2; // 0x2
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Compass {
+    ctor public Compass(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getOrientations();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class EnergyLevel {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getBatteryPercent();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEnergyIsLow();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getFuelPercent();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getFuelVolumeDisplayUnit();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRangeRemainingMeters();
+  }
+
+  public static final class EnergyLevel.Builder {
+    ctor public EnergyLevel.Builder();
+    method public androidx.car.app.hardware.info.EnergyLevel build();
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setBatteryPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelVolumeDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class EnergyProfile {
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!> getEvConnectorTypes();
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!> getFuelTypes();
+    field public static final int EVCONNECTOR_TYPE_CHADEMO = 3; // 0x3
+    field public static final int EVCONNECTOR_TYPE_COMBO_1 = 4; // 0x4
+    field public static final int EVCONNECTOR_TYPE_COMBO_2 = 5; // 0x5
+    field public static final int EVCONNECTOR_TYPE_GBT = 9; // 0x9
+    field public static final int EVCONNECTOR_TYPE_GBT_DC = 10; // 0xa
+    field public static final int EVCONNECTOR_TYPE_J1772 = 1; // 0x1
+    field public static final int EVCONNECTOR_TYPE_MENNEKES = 2; // 0x2
+    field public static final int EVCONNECTOR_TYPE_OTHER = 101; // 0x65
+    field public static final int EVCONNECTOR_TYPE_SCAME = 11; // 0xb
+    field public static final int EVCONNECTOR_TYPE_TESLA_HPWC = 7; // 0x7
+    field public static final int EVCONNECTOR_TYPE_TESLA_ROADSTER = 6; // 0x6
+    field public static final int EVCONNECTOR_TYPE_TESLA_SUPERCHARGER = 8; // 0x8
+    field public static final int EVCONNECTOR_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int FUEL_TYPE_BIODIESEL = 5; // 0x5
+    field public static final int FUEL_TYPE_CNG = 8; // 0x8
+    field public static final int FUEL_TYPE_DIESEL_1 = 3; // 0x3
+    field public static final int FUEL_TYPE_DIESEL_2 = 4; // 0x4
+    field public static final int FUEL_TYPE_E85 = 6; // 0x6
+    field public static final int FUEL_TYPE_ELECTRIC = 10; // 0xa
+    field public static final int FUEL_TYPE_HYDROGEN = 11; // 0xb
+    field public static final int FUEL_TYPE_LEADED = 2; // 0x2
+    field public static final int FUEL_TYPE_LNG = 9; // 0x9
+    field public static final int FUEL_TYPE_LPG = 7; // 0x7
+    field public static final int FUEL_TYPE_OTHER = 12; // 0xc
+    field public static final int FUEL_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int FUEL_TYPE_UNLEADED = 1; // 0x1
+  }
+
+  public static final class EnergyProfile.Builder {
+    ctor public EnergyProfile.Builder();
+    method public androidx.car.app.hardware.info.EnergyProfile build();
+    method public androidx.car.app.hardware.info.EnergyProfile.Builder setEvConnectorTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.info.EnergyProfile.Builder setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public class EvStatus {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortConnected();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortOpen();
+  }
+
+  public static final class EvStatus.Builder {
+    ctor public EvStatus.Builder();
+    method public androidx.car.app.hardware.info.EvStatus build();
+    method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortConnected(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortOpen(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Gyroscope {
+    ctor public Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getRotations();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Mileage {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getOdometerMeters();
+  }
+
+  public static final class Mileage.Builder {
+    ctor public Mileage.Builder();
+    method public androidx.car.app.hardware.info.Mileage build();
+    method public androidx.car.app.hardware.info.Mileage.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public androidx.car.app.hardware.info.Mileage.Builder setOdometerMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Model {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.String!> getManufacturer();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.String!> getName();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getYear();
+  }
+
+  public static final class Model.Builder {
+    ctor public Model.Builder();
+    method public androidx.car.app.hardware.info.Model build();
+    method public androidx.car.app.hardware.info.Model.Builder setManufacturer(androidx.car.app.hardware.common.CarValue<java.lang.String!>);
+    method public androidx.car.app.hardware.info.Model.Builder setName(androidx.car.app.hardware.common.CarValue<java.lang.String!>);
+    method public androidx.car.app.hardware.info.Model.Builder setYear(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Speed {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getDisplaySpeedMetersPerSecond();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRawSpeedMetersPerSecond();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getSpeedDisplayUnit();
+  }
+
+  public static final class Speed.Builder {
+    ctor public Speed.Builder();
+    method public androidx.car.app.hardware.info.Speed build();
+    method public androidx.car.app.hardware.info.Speed.Builder setDisplaySpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public androidx.car.app.hardware.info.Speed.Builder setRawSpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public androidx.car.app.hardware.info.Speed.Builder setSpeedDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class TollCard {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getCardState();
+    field public static final int TOLLCARD_STATE_INVALID = 2; // 0x2
+    field public static final int TOLLCARD_STATE_NOT_INSERTED = 3; // 0x3
+    field public static final int TOLLCARD_STATE_UNKNOWN = 0; // 0x0
+    field public static final int TOLLCARD_STATE_VALID = 1; // 0x1
+  }
+
+  public static final class TollCard.Builder {
+    ctor public TollCard.Builder();
+    method public androidx.car.app.hardware.info.TollCard build();
+    method public androidx.car.app.hardware.info.TollCard.Builder setCardState(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+  }
+
+}
+
+package androidx.car.app.managers {
+
+  public interface Manager {
+  }
+
+}
+
+package androidx.car.app.media {
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public interface CarAudioCallback {
+    method public void onStopRecording();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public class CarAudioCallbackDelegate {
+    method public void onStopRecording();
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public abstract class CarAudioRecord {
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.car.app.media.CarAudioRecord create(androidx.car.app.CarContext);
+    method public int read(byte[], int, int);
+    method public void startRecording();
+    method public void stopRecording();
+    field public static final int AUDIO_CONTENT_BUFFER_SIZE = 512; // 0x200
+    field public static final String AUDIO_CONTENT_MIME = "audio/l16";
+    field public static final int AUDIO_CONTENT_SAMPLING_RATE = 16000; // 0x3e80
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class OpenMicrophoneRequest {
+    method public androidx.car.app.media.CarAudioCallbackDelegate getCarAudioCallbackDelegate();
+  }
+
+  public static final class OpenMicrophoneRequest.Builder {
+    ctor public OpenMicrophoneRequest.Builder(androidx.car.app.media.CarAudioCallback);
+    method public androidx.car.app.media.OpenMicrophoneRequest build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class OpenMicrophoneResponse {
+    method public androidx.car.app.media.CarAudioCallbackDelegate getCarAudioCallback();
+    method public java.io.InputStream getCarMicrophoneInputStream();
+  }
+
+  public static final class OpenMicrophoneResponse.Builder {
+    ctor public OpenMicrophoneResponse.Builder(androidx.car.app.media.CarAudioCallback);
+    method public androidx.car.app.media.OpenMicrophoneResponse build();
+    method public androidx.car.app.media.OpenMicrophoneResponse.Builder setCarMicrophoneDescriptor(android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package androidx.car.app.mediaextensions {
+
+  public final class MetadataExtras {
+    field public static final String KEY_CONTENT_FORMAT_DARK_MODE_LARGE_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_DARK_MODE_LARGE_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_DARK_MODE_SMALL_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_DARK_MODE_SMALL_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_LIGHT_MODE_LARGE_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_LIGHT_MODE_LARGE_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_LIGHT_MODE_SMALL_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_LIGHT_MODE_SMALL_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI";
+    field public static final String KEY_DESCRIPTION_LINK_MEDIA_ID = "androidx.car.app.mediaextensions.KEY_DESCRIPTION_LINK_MEDIA_ID";
+    field public static final String KEY_IMMERSIVE_AUDIO = "androidx.car.app.mediaextensions.KEY_IMMERSIVE_AUDIO";
+    field public static final String KEY_SUBTITLE_LINK_MEDIA_ID = "androidx.car.app.mediaextensions.KEY_SUBTITLE_LINK_MEDIA_ID";
+  }
+
+}
+
+package androidx.car.app.messaging {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public class MessagingServiceConstants {
+    field public static final String ACTION_HANDLE_CAR_MESSAGING = "androidx.car.app.messaging.action.HANDLE_CAR_MESSAGING";
+  }
+
+}
+
+package androidx.car.app.messaging.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class CarMessage {
+    method public androidx.car.app.model.CarText? getBody();
+    method public String? getMultimediaMimeType();
+    method public android.net.Uri? getMultimediaUri();
+    method public long getReceivedTimeEpochMillis();
+    method public androidx.core.app.Person? getSender();
+    method public boolean isRead();
+  }
+
+  public static final class CarMessage.Builder {
+    ctor public CarMessage.Builder();
+    method public androidx.car.app.messaging.model.CarMessage build();
+    method public androidx.car.app.messaging.model.CarMessage.Builder setBody(androidx.car.app.model.CarText?);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setMultimediaMimeType(String?);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setMultimediaUri(android.net.Uri?);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setRead(boolean);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setReceivedTimeEpochMillis(long);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setSender(androidx.core.app.Person?);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public interface ConversationCallback {
+    method public void onMarkAsRead();
+    method public void onTextReply(String);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public interface ConversationCallbackDelegate {
+    method public void sendMarkAsRead(androidx.car.app.OnDoneCallback);
+    method public void sendTextReply(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class ConversationItem implements androidx.car.app.model.Item {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.messaging.model.ConversationCallbackDelegate getConversationCallbackDelegate();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public String getId();
+    method public java.util.List<androidx.car.app.messaging.model.CarMessage!> getMessages();
+    method public androidx.core.app.Person getSelf();
+    method public androidx.car.app.model.CarText getTitle();
+    method public boolean isGroupConversation();
+  }
+
+  public static final class ConversationItem.Builder {
+    ctor public ConversationItem.Builder();
+    ctor public ConversationItem.Builder(androidx.car.app.messaging.model.ConversationItem);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.messaging.model.ConversationItem build();
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setConversationCallback(androidx.car.app.messaging.model.ConversationCallback);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setGroupConversation(boolean);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setId(String);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setMessages(java.util.List<androidx.car.app.messaging.model.CarMessage!>);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setSelf(androidx.core.app.Person);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setTitle(androidx.car.app.model.CarText);
+  }
+
+}
+
+package androidx.car.app.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Action {
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public int getFlags();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public int getType();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
+    method public boolean isStandard();
+    method public static String typeToString(int);
+    field public static final androidx.car.app.model.Action APP_ICON;
+    field public static final androidx.car.app.model.Action BACK;
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final androidx.car.app.model.Action COMPOSE_MESSAGE;
+    field @androidx.car.app.annotations.RequiresCarApi(5) public static final int FLAG_DEFAULT = 4; // 0x4
+    field @androidx.car.app.annotations.RequiresCarApi(5) public static final int FLAG_IS_PERSISTENT = 2; // 0x2
+    field @androidx.car.app.annotations.RequiresCarApi(4) public static final int FLAG_PRIMARY = 1; // 0x1
+    field public static final androidx.car.app.model.Action PAN;
+    field public static final int TYPE_APP_ICON = 65538; // 0x10002
+    field public static final int TYPE_BACK = 65539; // 0x10003
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int TYPE_COMPOSE_MESSAGE = 65541; // 0x10005
+    field public static final int TYPE_CUSTOM = 1; // 0x1
+    field public static final int TYPE_PAN = 65540; // 0x10004
+  }
+
+  public static final class Action.Builder {
+    ctor public Action.Builder();
+    ctor @androidx.car.app.annotations.RequiresCarApi(2) public Action.Builder(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Action build();
+    method public androidx.car.app.model.Action.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Action.Builder setEnabled(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Action.Builder setFlags(int);
+    method public androidx.car.app.model.Action.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Action.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.Action.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Action.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ActionStrip {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getFirstActionOfType(int);
+  }
+
+  public static final class ActionStrip.Builder {
+    ctor public ActionStrip.Builder();
+    method public androidx.car.app.model.ActionStrip.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.ActionStrip build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class Alert {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.AlertCallbackDelegate? getCallbackDelegate();
+    method public long getDurationMillis();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public int getId();
+    method public androidx.car.app.model.CarText? getSubtitle();
+    method public androidx.car.app.model.CarText getTitle();
+  }
+
+  public static final class Alert.Builder {
+    ctor public Alert.Builder(int, androidx.car.app.model.CarText, long);
+    method public androidx.car.app.model.Alert.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Alert build();
+    method public androidx.car.app.model.Alert.Builder setCallback(androidx.car.app.model.AlertCallback);
+    method public androidx.car.app.model.Alert.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Alert.Builder setSubtitle(androidx.car.app.model.CarText);
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface AlertCallback {
+    method public void onCancel(int);
+    method public void onDismiss();
+    field public static final int REASON_NOT_SUPPORTED = 3; // 0x3
+    field public static final int REASON_TIMEOUT = 1; // 0x1
+    field public static final int REASON_USER_ACTION = 2; // 0x2
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface AlertCallbackDelegate {
+    method public void sendCancel(int, androidx.car.app.OnDoneCallback);
+    method public void sendDismiss(androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class Badge {
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public boolean hasDot();
+  }
+
+  public static final class Badge.Builder {
+    ctor public Badge.Builder();
+    method public androidx.car.app.model.Badge build();
+    method public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.Badge.Builder setHasDot(boolean);
+    method public androidx.car.app.model.Badge.Builder setIcon(androidx.car.app.model.CarIcon);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarColor {
+    method public static androidx.car.app.model.CarColor createCustom(@ColorInt int, @ColorInt int);
+    method @ColorInt public int getColor();
+    method @ColorInt public int getColorDark();
+    method public int getType();
+    field public static final androidx.car.app.model.CarColor BLUE;
+    field public static final androidx.car.app.model.CarColor DEFAULT;
+    field public static final androidx.car.app.model.CarColor GREEN;
+    field public static final androidx.car.app.model.CarColor PRIMARY;
+    field public static final androidx.car.app.model.CarColor RED;
+    field public static final androidx.car.app.model.CarColor SECONDARY;
+    field public static final int TYPE_BLUE = 6; // 0x6
+    field public static final int TYPE_CUSTOM = 0; // 0x0
+    field public static final int TYPE_DEFAULT = 1; // 0x1
+    field public static final int TYPE_GREEN = 5; // 0x5
+    field public static final int TYPE_PRIMARY = 2; // 0x2
+    field public static final int TYPE_RED = 4; // 0x4
+    field public static final int TYPE_SECONDARY = 3; // 0x3
+    field public static final int TYPE_YELLOW = 7; // 0x7
+    field public static final androidx.car.app.model.CarColor YELLOW;
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarIcon {
+    method public androidx.core.graphics.drawable.IconCompat? getIcon();
+    method public androidx.car.app.model.CarColor? getTint();
+    method public int getType();
+    field public static final androidx.car.app.model.CarIcon ALERT;
+    field public static final androidx.car.app.model.CarIcon APP_ICON;
+    field public static final androidx.car.app.model.CarIcon BACK;
+    field @androidx.car.app.annotations.RequiresCarApi(7) public static final androidx.car.app.model.CarIcon COMPOSE_MESSAGE;
+    field public static final androidx.car.app.model.CarIcon ERROR;
+    field @androidx.car.app.annotations.RequiresCarApi(2) public static final androidx.car.app.model.CarIcon PAN;
+    field public static final int TYPE_ALERT = 4; // 0x4
+    field public static final int TYPE_APP_ICON = 5; // 0x5
+    field public static final int TYPE_BACK = 3; // 0x3
+    field public static final int TYPE_COMPOSE_MESSAGE = 8; // 0x8
+    field public static final int TYPE_CUSTOM = 1; // 0x1
+    field public static final int TYPE_ERROR = 6; // 0x6
+    field public static final int TYPE_PAN = 7; // 0x7
+  }
+
+  public static final class CarIcon.Builder {
+    ctor public CarIcon.Builder(androidx.car.app.model.CarIcon);
+    ctor public CarIcon.Builder(androidx.core.graphics.drawable.IconCompat);
+    method public androidx.car.app.model.CarIcon build();
+    method public androidx.car.app.model.CarIcon.Builder setTint(androidx.car.app.model.CarColor);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarIconSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.CarIconSpan create(androidx.car.app.model.CarIcon);
+    method public static androidx.car.app.model.CarIconSpan create(androidx.car.app.model.CarIcon, int);
+    method public int getAlignment();
+    method public androidx.car.app.model.CarIcon getIcon();
+    field public static final int ALIGN_BASELINE = 1; // 0x1
+    field public static final int ALIGN_BOTTOM = 0; // 0x0
+    field public static final int ALIGN_CENTER = 2; // 0x2
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarLocation {
+    method public static androidx.car.app.model.CarLocation create(android.location.Location);
+    method public static androidx.car.app.model.CarLocation create(double, double);
+    method public double getLatitude();
+    method public double getLongitude();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public class CarSpan extends android.text.style.CharacterStyle {
+    ctor public CarSpan();
+    method public void updateDrawState(android.text.TextPaint);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarText {
+    method public static androidx.car.app.model.CarText create(CharSequence);
+    method public java.util.List<java.lang.CharSequence!> getVariants();
+    method public boolean isEmpty();
+    method public static boolean isNullOrEmpty(androidx.car.app.model.CarText?);
+    method public CharSequence toCharSequence();
+  }
+
+  @SuppressCompatibility public static final class CarText.Builder {
+    ctor public CarText.Builder(CharSequence);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.CarText.Builder addVariant(CharSequence);
+    method public androidx.car.app.model.CarText build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(2) public final class ClickableSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.ClickableSpan create(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.OnClickDelegate getOnClickDelegate();
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public interface Content {
+    method public String getContentId();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class DateTimeWithZone {
+    method @RequiresApi(26) public static androidx.car.app.model.DateTimeWithZone create(java.time.ZonedDateTime);
+    method public static androidx.car.app.model.DateTimeWithZone create(long, @IntRange(from=0xffff02e0, to=64800) int, String);
+    method public static androidx.car.app.model.DateTimeWithZone create(long, java.util.TimeZone);
+    method public long getTimeSinceEpochMillis();
+    method public int getZoneOffsetSeconds();
+    method public String? getZoneShortName();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Distance {
+    method public static androidx.car.app.model.Distance create(double, int);
+    method public double getDisplayDistance();
+    method public int getDisplayUnit();
+    field public static final int UNIT_FEET = 6; // 0x6
+    field public static final int UNIT_KILOMETERS = 2; // 0x2
+    field public static final int UNIT_KILOMETERS_P1 = 3; // 0x3
+    field public static final int UNIT_METERS = 1; // 0x1
+    field public static final int UNIT_MILES = 4; // 0x4
+    field public static final int UNIT_MILES_P1 = 5; // 0x5
+    field public static final int UNIT_YARDS = 7; // 0x7
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class DistanceSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.DistanceSpan create(androidx.car.app.model.Distance);
+    method public androidx.car.app.model.Distance getDistance();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class DurationSpan extends androidx.car.app.model.CarSpan {
+    method @RequiresApi(26) public static androidx.car.app.model.DurationSpan create(java.time.Duration);
+    method public static androidx.car.app.model.DurationSpan create(long);
+    method public long getDurationSeconds();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ForegroundCarColorSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.ForegroundCarColorSpan create(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.CarColor getColor();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class GridItem implements androidx.car.app.model.Item {
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.Badge? getBadge();
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public int getImageType();
+    method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
+    method public androidx.car.app.model.CarText? getText();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+    field public static final int IMAGE_TYPE_ICON = 1; // 0x1
+    field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
+  }
+
+  public static final class GridItem.Builder {
+    ctor public GridItem.Builder();
+    method public androidx.car.app.model.GridItem build();
+    method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, androidx.car.app.model.Badge);
+    method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int, androidx.car.app.model.Badge);
+    method public androidx.car.app.model.GridItem.Builder setLoading(boolean);
+    method public androidx.car.app.model.GridItem.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.GridItem.Builder setText(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.GridItem.Builder setText(CharSequence);
+    method public androidx.car.app.model.GridItem.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.GridItem.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class GridTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemImageShape();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemSize();
+    method public androidx.car.app.model.ItemList? getSingleList();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_CIRCLE = 2; // 0x2
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_UNSET = 1; // 0x1
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_LARGE = 4; // 0x4
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_MEDIUM = 2; // 0x2
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_SMALL = 1; // 0x1
+  }
+
+  public static final class GridTemplate.Builder {
+    ctor public GridTemplate.Builder();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.GridTemplate build();
+    method public androidx.car.app.model.GridTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.GridTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemImageShape(@SuppressCompatibility int);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemSize(@SuppressCompatibility int);
+    method public androidx.car.app.model.GridTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.GridTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.GridTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class Header {
+    method public java.util.List<androidx.car.app.model.Action!> getEndHeaderActions();
+    method public androidx.car.app.model.Action? getStartHeaderAction();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  public static final class Header.Builder {
+    ctor public Header.Builder();
+    method public androidx.car.app.model.Header.Builder addEndHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Header build();
+    method public androidx.car.app.model.Header.Builder setStartHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Header.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Header.Builder setTitle(CharSequence);
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallback {
+    method public default void onInputSubmitted(String);
+    method public default void onInputTextChanged(String);
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallbackDelegate {
+    method public void sendInputSubmitted(String, androidx.car.app.OnDoneCallback);
+    method public void sendInputTextChanged(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface Item {
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ItemList {
+    method public java.util.List<androidx.car.app.model.Item!> getItems();
+    method public androidx.car.app.model.CarText? getNoItemsMessage();
+    method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
+    method public androidx.car.app.model.OnSelectedDelegate? getOnSelectedDelegate();
+    method public int getSelectedIndex();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder toBuilder();
+  }
+
+  public static final class ItemList.Builder {
+    ctor public ItemList.Builder();
+    method public androidx.car.app.model.ItemList.Builder addItem(androidx.car.app.model.Item);
+    method public androidx.car.app.model.ItemList build();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder clearItems();
+    method public androidx.car.app.model.ItemList.Builder setNoItemsMessage(CharSequence);
+    method public androidx.car.app.model.ItemList.Builder setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener);
+    method public androidx.car.app.model.ItemList.Builder setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener);
+    method public androidx.car.app.model.ItemList.Builder setSelectedIndex(@IntRange(from=0) int);
+  }
+
+  public static interface ItemList.OnItemVisibilityChangedListener {
+    method public void onItemVisibilityChanged(int, int);
+  }
+
+  public static interface ItemList.OnSelectedListener {
+    method public void onSelected(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ListTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public java.util.List<androidx.car.app.model.SectionedItemList!> getSectionedLists();
+    method public androidx.car.app.model.ItemList? getSingleList();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder toBuilder();
+  }
+
+  public static final class ListTemplate.Builder {
+    ctor public ListTemplate.Builder();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.ListTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.ListTemplate.Builder addSectionedList(androidx.car.app.model.SectionedItemList);
+    method public androidx.car.app.model.ListTemplate build();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder clearSectionedLists();
+    method public androidx.car.app.model.ListTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.ListTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.ListTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.ListTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.ListTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class LongMessageTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.CarText getMessage();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public static final class LongMessageTemplate.Builder {
+    ctor public LongMessageTemplate.Builder(CharSequence);
+    method public androidx.car.app.model.LongMessageTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.LongMessageTemplate build();
+    method public androidx.car.app.model.LongMessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.LongMessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.LongMessageTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class MessageTemplate implements androidx.car.app.model.Template {
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.CarText? getDebugMessage();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public androidx.car.app.model.CarText getMessage();
+    method public androidx.car.app.model.CarText? getTitle();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public boolean isLoading();
+  }
+
+  public static final class MessageTemplate.Builder {
+    ctor public MessageTemplate.Builder(androidx.car.app.model.CarText);
+    ctor public MessageTemplate.Builder(CharSequence);
+    method public androidx.car.app.model.MessageTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.MessageTemplate build();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(String);
+    method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(Throwable);
+    method public androidx.car.app.model.MessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.MessageTemplate.Builder setIcon(androidx.car.app.model.CarIcon);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.MessageTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Metadata {
+    method public androidx.car.app.model.Place? getPlace();
+    field public static final androidx.car.app.model.Metadata EMPTY_METADATA;
+  }
+
+  public static final class Metadata.Builder {
+    ctor public Metadata.Builder();
+    ctor public Metadata.Builder(androidx.car.app.model.Metadata);
+    method public androidx.car.app.model.Metadata build();
+    method public androidx.car.app.model.Metadata.Builder setPlace(androidx.car.app.model.Place);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnCheckedChangeDelegate {
+    method public void sendCheckedChange(boolean, androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnClickDelegate {
+    method public boolean isParkedOnly();
+    method public void sendClick(androidx.car.app.OnDoneCallback);
+  }
+
+  public interface OnClickListener {
+    method public void onClick();
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface OnContentRefreshDelegate {
+    method public void sendContentRefreshRequested(androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public interface OnContentRefreshListener {
+    method public void onContentRefreshRequested();
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnItemVisibilityChangedDelegate {
+    method public void sendItemVisibilityChanged(int, int, androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnSelectedDelegate {
+    method public void sendSelected(int, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Pane {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.CarIcon? getImage();
+    method public java.util.List<androidx.car.app.model.Row!> getRows();
+    method public boolean isLoading();
+  }
+
+  public static final class Pane.Builder {
+    ctor public Pane.Builder();
+    method public androidx.car.app.model.Pane.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Pane.Builder addRow(androidx.car.app.model.Row);
+    method public androidx.car.app.model.Pane build();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Pane.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Pane.Builder setLoading(boolean);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PaneTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.Pane getPane();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  public static final class PaneTemplate.Builder {
+    ctor public PaneTemplate.Builder(androidx.car.app.model.Pane);
+    method public androidx.car.app.model.PaneTemplate build();
+    method public androidx.car.app.model.PaneTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.PaneTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.PaneTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ParkedOnlyOnClickListener implements androidx.car.app.model.OnClickListener {
+    method public static androidx.car.app.model.ParkedOnlyOnClickListener create(androidx.car.app.model.OnClickListener);
+    method public void onClick();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Place {
+    method public androidx.car.app.model.CarLocation getLocation();
+    method public androidx.car.app.model.PlaceMarker? getMarker();
+  }
+
+  public static final class Place.Builder {
+    ctor public Place.Builder(androidx.car.app.model.CarLocation);
+    ctor public Place.Builder(androidx.car.app.model.Place);
+    method public androidx.car.app.model.Place build();
+    method public androidx.car.app.model.Place.Builder setMarker(androidx.car.app.model.PlaceMarker);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PlaceListMapTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Place? getAnchor();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.OnContentRefreshDelegate? getOnContentRefreshDelegate();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isCurrentLocationEnabled();
+    method public boolean isLoading();
+  }
+
+  public static final class PlaceListMapTemplate.Builder {
+    ctor public PlaceListMapTemplate.Builder();
+    method public androidx.car.app.model.PlaceListMapTemplate build();
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setAnchor(androidx.car.app.model.Place);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setCurrentLocationEnabled(boolean);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setLoading(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.PlaceListMapTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PlaceMarker {
+    method public androidx.car.app.model.CarColor? getColor();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public int getIconType();
+    method public androidx.car.app.model.CarText? getLabel();
+    field public static final int TYPE_ICON = 0; // 0x0
+    field public static final int TYPE_IMAGE = 1; // 0x1
+  }
+
+  public static final class PlaceMarker.Builder {
+    ctor public PlaceMarker.Builder();
+    method public androidx.car.app.model.PlaceMarker build();
+    method public androidx.car.app.model.PlaceMarker.Builder setColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.PlaceMarker.Builder setIcon(androidx.car.app.model.CarIcon, int);
+    method public androidx.car.app.model.PlaceMarker.Builder setLabel(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Row implements androidx.car.app.model.Item {
+    method @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public androidx.car.app.model.Metadata? getMetadata();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public int getNumericDecoration();
+    method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
+    method public int getRowImageType();
+    method public java.util.List<androidx.car.app.model.CarText!> getTexts();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public androidx.car.app.model.Toggle? getToggle();
+    method public boolean isBrowsable();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
+    method public androidx.car.app.model.Row row();
+    method public CharSequence yourBoat();
+    field public static final int IMAGE_TYPE_ICON = 4; // 0x4
+    field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
+    field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
+    field public static final int NO_DECORATION = -1; // 0xffffffff
+  }
+
+  public static final class Row.Builder {
+    ctor public Row.Builder();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Row.Builder addText(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Row.Builder addText(CharSequence);
+    method public androidx.car.app.model.Row build();
+    method public androidx.car.app.model.Row.Builder setBrowsable(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Row.Builder setEnabled(boolean);
+    method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon, int);
+    method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
+    method @IntRange(from=0) @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder setNumericDecoration(int);
+    method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
+    method public androidx.car.app.model.Row.Builder setToggle(androidx.car.app.model.Toggle);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface SearchCallbackDelegate {
+    method public void sendSearchSubmitted(String, androidx.car.app.OnDoneCallback);
+    method public void sendSearchTextChanged(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class SearchTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public String? getInitialSearchText();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method public androidx.car.app.model.SearchCallbackDelegate getSearchCallbackDelegate();
+    method public String? getSearchHint();
+    method public boolean isLoading();
+    method public boolean isShowKeyboardByDefault();
+  }
+
+  public static final class SearchTemplate.Builder {
+    ctor public SearchTemplate.Builder(androidx.car.app.model.SearchTemplate.SearchCallback);
+    method public androidx.car.app.model.SearchTemplate build();
+    method public androidx.car.app.model.SearchTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.SearchTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.SearchTemplate.Builder setInitialSearchText(String);
+    method public androidx.car.app.model.SearchTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.SearchTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.SearchTemplate.Builder setSearchHint(String);
+    method public androidx.car.app.model.SearchTemplate.Builder setShowKeyboardByDefault(boolean);
+  }
+
+  public static interface SearchTemplate.SearchCallback {
+    method public default void onSearchSubmitted(String);
+    method public default void onSearchTextChanged(String);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class SectionedItemList {
+    method public static androidx.car.app.model.SectionedItemList create(androidx.car.app.model.ItemList, CharSequence);
+    method public androidx.car.app.model.CarText getHeader();
+    method public androidx.car.app.model.ItemList getItemList();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public final class Tab implements androidx.car.app.model.Content {
+    method public String getContentId();
+    method public androidx.car.app.model.CarIcon getIcon();
+    method public androidx.car.app.model.CarText getTitle();
+  }
+
+  public static final class Tab.Builder {
+    ctor public Tab.Builder();
+    ctor public Tab.Builder(androidx.car.app.model.Tab);
+    method public androidx.car.app.model.Tab build();
+    method public androidx.car.app.model.Tab.Builder setContentId(String);
+    method public androidx.car.app.model.Tab.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Tab.Builder setTitle(CharSequence);
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public interface TabCallbackDelegate {
+    method public void sendTabSelected(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class TabContents implements androidx.car.app.model.Content {
+    method public String getContentId();
+    method public androidx.car.app.model.Template getTemplate();
+    field public static final String CONTENT_ID = "TAB_CONTENTS_CONTENT_ID";
+  }
+
+  public static final class TabContents.Builder {
+    ctor public TabContents.Builder(androidx.car.app.model.Template);
+    method public androidx.car.app.model.TabContents build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class TabTemplate implements androidx.car.app.model.Template {
+    method public String getActiveTabContentId();
+    method public androidx.car.app.model.Action getHeaderAction();
+    method public androidx.car.app.model.TabCallbackDelegate getTabCallbackDelegate();
+    method public androidx.car.app.model.TabContents getTabContents();
+    method public java.util.List<androidx.car.app.model.Tab!> getTabs();
+    method public boolean isLoading();
+  }
+
+  public static final class TabTemplate.Builder {
+    ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate);
+    ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate.TabCallback);
+    method public androidx.car.app.model.TabTemplate.Builder addTab(androidx.car.app.model.Tab);
+    method public androidx.car.app.model.TabTemplate build();
+    method public androidx.car.app.model.TabTemplate.Builder setActiveTabContentId(String);
+    method public androidx.car.app.model.TabTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.TabTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.TabTemplate.Builder setTabContents(androidx.car.app.model.TabContents);
+  }
+
+  public static interface TabTemplate.TabCallback {
+    method public default void onTabSelected(String);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface Template {
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class TemplateInfo {
+    ctor public TemplateInfo(Class<? extends androidx.car.app.model.Template>, String);
+    method public Class<? extends androidx.car.app.model.Template> getTemplateClass();
+    method public String getTemplateId();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class TemplateWrapper {
+    method public static androidx.car.app.model.TemplateWrapper copyOf(androidx.car.app.model.TemplateWrapper);
+    method public int getCurrentTaskStep();
+    method public String getId();
+    method public androidx.car.app.model.Template getTemplate();
+    method public java.util.List<androidx.car.app.model.TemplateInfo!> getTemplateInfosForScreenStack();
+    method public boolean isRefresh();
+    method public void setCurrentTaskStep(int);
+    method public void setId(String);
+    method public void setRefresh(boolean);
+    method public void setTemplate(androidx.car.app.model.Template);
+    method public static androidx.car.app.model.TemplateWrapper wrap(androidx.car.app.model.Template);
+    method public static androidx.car.app.model.TemplateWrapper wrap(androidx.car.app.model.Template, String);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Toggle {
+    method public androidx.car.app.model.OnCheckedChangeDelegate getOnCheckedChangeDelegate();
+    method public boolean isChecked();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
+  }
+
+  public static final class Toggle.Builder {
+    ctor public Toggle.Builder(androidx.car.app.model.Toggle.OnCheckedChangeListener);
+    method public androidx.car.app.model.Toggle build();
+    method public androidx.car.app.model.Toggle.Builder setChecked(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Toggle.Builder setEnabled(boolean);
+  }
+
+  public static interface Toggle.OnCheckedChangeListener {
+    method public void onCheckedChange(boolean);
+  }
+
+}
+
+package androidx.car.app.model.signin {
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class InputSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    method public androidx.car.app.model.CarText? getDefaultValue();
+    method public androidx.car.app.model.CarText? getErrorMessage();
+    method public androidx.car.app.model.CarText? getHint();
+    method public androidx.car.app.model.InputCallbackDelegate getInputCallbackDelegate();
+    method public int getInputType();
+    method public int getKeyboardType();
+    method public boolean isShowKeyboardByDefault();
+    field public static final int INPUT_TYPE_DEFAULT = 1; // 0x1
+    field public static final int INPUT_TYPE_PASSWORD = 2; // 0x2
+    field public static final int KEYBOARD_DEFAULT = 1; // 0x1
+    field public static final int KEYBOARD_EMAIL = 2; // 0x2
+    field public static final int KEYBOARD_NUMBER = 4; // 0x4
+    field public static final int KEYBOARD_PHONE = 3; // 0x3
+  }
+
+  public static final class InputSignInMethod.Builder {
+    ctor public InputSignInMethod.Builder(androidx.car.app.model.InputCallback);
+    method public androidx.car.app.model.signin.InputSignInMethod build();
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setDefaultValue(String);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setErrorMessage(CharSequence);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setHint(CharSequence);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setInputType(int);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setKeyboardType(int);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setShowKeyboardByDefault(boolean);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class PinSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    ctor public PinSignInMethod(CharSequence);
+    method public androidx.car.app.model.CarText getPinCode();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class ProviderSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    ctor public ProviderSignInMethod(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Action getAction();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(4) public final class QRCodeSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    ctor public QRCodeSignInMethod(android.net.Uri);
+    method public android.net.Uri getUri();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class SignInTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.CarText? getAdditionalText();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.CarText? getInstructions();
+    method public androidx.car.app.model.signin.SignInTemplate.SignInMethod getSignInMethod();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public static final class SignInTemplate.Builder {
+    ctor public SignInTemplate.Builder(androidx.car.app.model.signin.SignInTemplate.SignInMethod);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.signin.SignInTemplate build();
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setAdditionalText(CharSequence);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setInstructions(CharSequence);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setTitle(CharSequence);
+  }
+
+  public static interface SignInTemplate.SignInMethod {
+  }
+
+}
+
+package androidx.car.app.navigation {
+
+  public class NavigationManager implements androidx.car.app.managers.Manager {
+    method @MainThread public void clearNavigationManagerCallback();
+    method @MainThread public void navigationEnded();
+    method @MainThread public void navigationStarted();
+    method @MainThread public void setNavigationManagerCallback(androidx.car.app.navigation.NavigationManagerCallback);
+    method @MainThread public void setNavigationManagerCallback(java.util.concurrent.Executor, androidx.car.app.navigation.NavigationManagerCallback);
+    method @MainThread public void updateTrip(androidx.car.app.navigation.model.Trip);
+  }
+
+  public interface NavigationManagerCallback {
+    method public default void onAutoDriveEnabled();
+    method public default void onStopNavigation();
+  }
+
+}
+
+package androidx.car.app.navigation.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Destination {
+    method public androidx.car.app.model.CarText? getAddress();
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public androidx.car.app.model.CarText? getName();
+  }
+
+  public static final class Destination.Builder {
+    ctor public Destination.Builder();
+    method public androidx.car.app.navigation.model.Destination build();
+    method public androidx.car.app.navigation.model.Destination.Builder setAddress(CharSequence);
+    method public androidx.car.app.navigation.model.Destination.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.Destination.Builder setName(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Lane {
+    method public java.util.List<androidx.car.app.navigation.model.LaneDirection!> getDirections();
+  }
+
+  public static final class Lane.Builder {
+    ctor public Lane.Builder();
+    method public androidx.car.app.navigation.model.Lane.Builder addDirection(androidx.car.app.navigation.model.LaneDirection);
+    method public androidx.car.app.navigation.model.Lane build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class LaneDirection {
+    method public static androidx.car.app.navigation.model.LaneDirection create(int, boolean);
+    method public int getShape();
+    method public boolean isRecommended();
+    field public static final int SHAPE_NORMAL_LEFT = 5; // 0x5
+    field public static final int SHAPE_NORMAL_RIGHT = 6; // 0x6
+    field public static final int SHAPE_SHARP_LEFT = 7; // 0x7
+    field public static final int SHAPE_SHARP_RIGHT = 8; // 0x8
+    field public static final int SHAPE_SLIGHT_LEFT = 3; // 0x3
+    field public static final int SHAPE_SLIGHT_RIGHT = 4; // 0x4
+    field public static final int SHAPE_STRAIGHT = 2; // 0x2
+    field public static final int SHAPE_UNKNOWN = 1; // 0x1
+    field public static final int SHAPE_U_TURN_LEFT = 9; // 0x9
+    field public static final int SHAPE_U_TURN_RIGHT = 10; // 0xa
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Maneuver {
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public int getRoundaboutExitAngle();
+    method public int getRoundaboutExitNumber();
+    method public int getType();
+    field public static final int TYPE_DEPART = 1; // 0x1
+    field public static final int TYPE_DESTINATION = 39; // 0x27
+    field public static final int TYPE_DESTINATION_LEFT = 41; // 0x29
+    field public static final int TYPE_DESTINATION_RIGHT = 42; // 0x2a
+    field public static final int TYPE_DESTINATION_STRAIGHT = 40; // 0x28
+    field public static final int TYPE_FERRY_BOAT = 37; // 0x25
+    field public static final int TYPE_FERRY_BOAT_LEFT = 47; // 0x2f
+    field public static final int TYPE_FERRY_BOAT_RIGHT = 48; // 0x30
+    field public static final int TYPE_FERRY_TRAIN = 38; // 0x26
+    field public static final int TYPE_FERRY_TRAIN_LEFT = 49; // 0x31
+    field public static final int TYPE_FERRY_TRAIN_RIGHT = 50; // 0x32
+    field public static final int TYPE_FORK_LEFT = 25; // 0x19
+    field public static final int TYPE_FORK_RIGHT = 26; // 0x1a
+    field public static final int TYPE_KEEP_LEFT = 3; // 0x3
+    field public static final int TYPE_KEEP_RIGHT = 4; // 0x4
+    field public static final int TYPE_MERGE_LEFT = 27; // 0x1b
+    field public static final int TYPE_MERGE_RIGHT = 28; // 0x1c
+    field public static final int TYPE_MERGE_SIDE_UNSPECIFIED = 29; // 0x1d
+    field public static final int TYPE_NAME_CHANGE = 2; // 0x2
+    field public static final int TYPE_OFF_RAMP_NORMAL_LEFT = 23; // 0x17
+    field public static final int TYPE_OFF_RAMP_NORMAL_RIGHT = 24; // 0x18
+    field public static final int TYPE_OFF_RAMP_SLIGHT_LEFT = 21; // 0x15
+    field public static final int TYPE_OFF_RAMP_SLIGHT_RIGHT = 22; // 0x16
+    field public static final int TYPE_ON_RAMP_NORMAL_LEFT = 15; // 0xf
+    field public static final int TYPE_ON_RAMP_NORMAL_RIGHT = 16; // 0x10
+    field public static final int TYPE_ON_RAMP_SHARP_LEFT = 17; // 0x11
+    field public static final int TYPE_ON_RAMP_SHARP_RIGHT = 18; // 0x12
+    field public static final int TYPE_ON_RAMP_SLIGHT_LEFT = 13; // 0xd
+    field public static final int TYPE_ON_RAMP_SLIGHT_RIGHT = 14; // 0xe
+    field public static final int TYPE_ON_RAMP_U_TURN_LEFT = 19; // 0x13
+    field public static final int TYPE_ON_RAMP_U_TURN_RIGHT = 20; // 0x14
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW = 34; // 0x22
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE = 35; // 0x23
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW = 32; // 0x20
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW_WITH_ANGLE = 33; // 0x21
+    field public static final int TYPE_ROUNDABOUT_ENTER_CCW = 45; // 0x2d
+    field public static final int TYPE_ROUNDABOUT_ENTER_CW = 43; // 0x2b
+    field public static final int TYPE_ROUNDABOUT_EXIT_CCW = 46; // 0x2e
+    field public static final int TYPE_ROUNDABOUT_EXIT_CW = 44; // 0x2c
+    field public static final int TYPE_STRAIGHT = 36; // 0x24
+    field public static final int TYPE_TURN_NORMAL_LEFT = 7; // 0x7
+    field public static final int TYPE_TURN_NORMAL_RIGHT = 8; // 0x8
+    field public static final int TYPE_TURN_SHARP_LEFT = 9; // 0x9
+    field public static final int TYPE_TURN_SHARP_RIGHT = 10; // 0xa
+    field public static final int TYPE_TURN_SLIGHT_LEFT = 5; // 0x5
+    field public static final int TYPE_TURN_SLIGHT_RIGHT = 6; // 0x6
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_U_TURN_LEFT = 11; // 0xb
+    field public static final int TYPE_U_TURN_RIGHT = 12; // 0xc
+  }
+
+  public static final class Maneuver.Builder {
+    ctor public Maneuver.Builder(int);
+    method public androidx.car.app.navigation.model.Maneuver build();
+    method public androidx.car.app.navigation.model.Maneuver.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.Maneuver.Builder setRoundaboutExitAngle(@IntRange(from=1, to=360) int);
+    method public androidx.car.app.navigation.model.Maneuver.Builder setRoundaboutExitNumber(@IntRange(from=1) int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class MapController {
+    method public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+  }
+
+  public static final class MapController.Builder {
+    ctor public MapController.Builder();
+    method public androidx.car.app.navigation.model.MapController build();
+    method public androidx.car.app.navigation.model.MapController.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.MapController.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class MapTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Header? getHeader();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method public androidx.car.app.navigation.model.MapController? getMapController();
+    method public androidx.car.app.model.Pane? getPane();
+  }
+
+  public static final class MapTemplate.Builder {
+    ctor public MapTemplate.Builder();
+    method public androidx.car.app.navigation.model.MapTemplate build();
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setHeader(androidx.car.app.model.Header);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setMapController(androidx.car.app.navigation.model.MapController);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setPane(androidx.car.app.model.Pane);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public final class MapWithContentTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Template? getContentTemplate();
+    method public androidx.car.app.navigation.model.MapController? getMapController();
+    method public boolean isLoading();
+  }
+
+  public static final class MapWithContentTemplate.Builder {
+    ctor public MapWithContentTemplate.Builder();
+    method public androidx.car.app.navigation.model.MapWithContentTemplate build();
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setContentTemplate(androidx.car.app.model.Template);
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setMapController(androidx.car.app.navigation.model.MapController);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class MessageInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public androidx.car.app.model.CarText? getText();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  public static final class MessageInfo.Builder {
+    ctor public MessageInfo.Builder(androidx.car.app.model.CarText);
+    ctor public MessageInfo.Builder(CharSequence);
+    method public androidx.car.app.navigation.model.MessageInfo build();
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setText(androidx.car.app.model.CarText);
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setText(CharSequence);
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class NavigationTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
+    method public androidx.car.app.navigation.model.TravelEstimate? getDestinationTravelEstimate();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo? getNavigationInfo();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+    method @Deprecated @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.Toggle? getPanModeToggle();
+  }
+
+  public static final class NavigationTemplate.Builder {
+    ctor public NavigationTemplate.Builder();
+    method public androidx.car.app.navigation.model.NavigationTemplate build();
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setDestinationTravelEstimate(androidx.car.app.navigation.model.TravelEstimate);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.NavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.NavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+  }
+
+  public static interface NavigationTemplate.NavigationInfo {
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(2) public interface PanModeDelegate {
+    method public void sendPanModeChanged(boolean, androidx.car.app.OnDoneCallback);
+  }
+
+  public interface PanModeListener {
+    method public void onPanModeChanged(boolean);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PlaceListNavigationTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Header? getHeader();
+    method @Deprecated public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.model.OnContentRefreshDelegate? getOnContentRefreshDelegate();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+    method @Deprecated public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+  }
+
+  public static final class PlaceListNavigationTemplate.Builder {
+    ctor public PlaceListNavigationTemplate.Builder();
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate build();
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setHeader(androidx.car.app.model.Header);
+    method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setLoading(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+    method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+    method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class RoutePreviewNavigationTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Header? getHeader();
+    method @Deprecated public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.model.Action? getNavigateAction();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+    method @Deprecated public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+  }
+
+  public static final class RoutePreviewNavigationTemplate.Builder {
+    ctor public RoutePreviewNavigationTemplate.Builder();
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate build();
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setHeader(androidx.car.app.model.Header);
+    method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setLoading(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setNavigateAction(androidx.car.app.model.Action);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+    method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+    method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class RoutingInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
+    method public androidx.car.app.model.Distance? getCurrentDistance();
+    method public androidx.car.app.navigation.model.Step? getCurrentStep();
+    method public androidx.car.app.model.CarIcon? getJunctionImage();
+    method public androidx.car.app.navigation.model.Step? getNextStep();
+    method public boolean isLoading();
+  }
+
+  public static final class RoutingInfo.Builder {
+    ctor public RoutingInfo.Builder();
+    method public androidx.car.app.navigation.model.RoutingInfo build();
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setCurrentStep(androidx.car.app.navigation.model.Step, androidx.car.app.model.Distance);
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setJunctionImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setLoading(boolean);
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setNextStep(androidx.car.app.navigation.model.Step);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Step {
+    method public androidx.car.app.model.CarText? getCue();
+    method public java.util.List<androidx.car.app.navigation.model.Lane!> getLanes();
+    method public androidx.car.app.model.CarIcon? getLanesImage();
+    method public androidx.car.app.navigation.model.Maneuver? getManeuver();
+    method public androidx.car.app.model.CarText? getRoad();
+  }
+
+  public static final class Step.Builder {
+    ctor public Step.Builder();
+    ctor public Step.Builder(androidx.car.app.model.CarText);
+    ctor public Step.Builder(CharSequence);
+    method public androidx.car.app.navigation.model.Step.Builder addLane(androidx.car.app.navigation.model.Lane);
+    method public androidx.car.app.navigation.model.Step build();
+    method public androidx.car.app.navigation.model.Step.Builder setCue(CharSequence);
+    method public androidx.car.app.navigation.model.Step.Builder setLanesImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.Step.Builder setManeuver(androidx.car.app.navigation.model.Maneuver);
+    method public androidx.car.app.navigation.model.Step.Builder setRoad(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class TravelEstimate {
+    method public androidx.car.app.model.DateTimeWithZone? getArrivalTimeAtDestination();
+    method public androidx.car.app.model.Distance? getRemainingDistance();
+    method public androidx.car.app.model.CarColor? getRemainingDistanceColor();
+    method public androidx.car.app.model.CarColor? getRemainingTimeColor();
+    method public long getRemainingTimeSeconds();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.CarIcon? getTripIcon();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.CarText? getTripText();
+    field public static final long REMAINING_TIME_UNKNOWN = -1L; // 0xffffffffffffffffL
+  }
+
+  public static final class TravelEstimate.Builder {
+    ctor public TravelEstimate.Builder(androidx.car.app.model.Distance, androidx.car.app.model.DateTimeWithZone);
+    ctor @RequiresApi(26) public TravelEstimate.Builder(androidx.car.app.model.Distance, java.time.ZonedDateTime);
+    method public androidx.car.app.navigation.model.TravelEstimate build();
+    method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingDistanceColor(androidx.car.app.model.CarColor);
+    method @RequiresApi(26) public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTime(java.time.Duration);
+    method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTimeColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTimeSeconds(@IntRange(from=0xffffffff) long);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.TravelEstimate.Builder setTripIcon(androidx.car.app.model.CarIcon);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.TravelEstimate.Builder setTripText(androidx.car.app.model.CarText);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Trip {
+    method public androidx.car.app.model.CarText? getCurrentRoad();
+    method public java.util.List<androidx.car.app.navigation.model.TravelEstimate!> getDestinationTravelEstimates();
+    method public java.util.List<androidx.car.app.navigation.model.Destination!> getDestinations();
+    method public java.util.List<androidx.car.app.navigation.model.TravelEstimate!> getStepTravelEstimates();
+    method public java.util.List<androidx.car.app.navigation.model.Step!> getSteps();
+    method public boolean isLoading();
+  }
+
+  public static final class Trip.Builder {
+    ctor public Trip.Builder();
+    method public androidx.car.app.navigation.model.Trip.Builder addDestination(androidx.car.app.navigation.model.Destination, androidx.car.app.navigation.model.TravelEstimate);
+    method public androidx.car.app.navigation.model.Trip.Builder addStep(androidx.car.app.navigation.model.Step, androidx.car.app.navigation.model.TravelEstimate);
+    method public androidx.car.app.navigation.model.Trip build();
+    method public androidx.car.app.navigation.model.Trip.Builder setCurrentRoad(CharSequence);
+    method public androidx.car.app.navigation.model.Trip.Builder setLoading(boolean);
+  }
+
+}
+
+package androidx.car.app.notification {
+
+  public final class CarAppExtender implements androidx.core.app.NotificationCompat.Extender {
+    ctor public CarAppExtender(android.app.Notification);
+    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+    method public java.util.List<android.app.Notification.Action!> getActions();
+    method public String? getChannelId();
+    method public androidx.car.app.model.CarColor? getColor();
+    method public android.app.PendingIntent? getContentIntent();
+    method public CharSequence? getContentText();
+    method public CharSequence? getContentTitle();
+    method public android.app.PendingIntent? getDeleteIntent();
+    method public int getImportance();
+    method public android.graphics.Bitmap? getLargeIcon();
+    method @DrawableRes public int getSmallIcon();
+    method public static boolean isExtended(android.app.Notification);
+  }
+
+  public static final class CarAppExtender.Builder {
+    ctor public CarAppExtender.Builder();
+    method public androidx.car.app.notification.CarAppExtender.Builder addAction(@DrawableRes int, CharSequence, android.app.PendingIntent);
+    method public androidx.car.app.notification.CarAppExtender build();
+    method public androidx.car.app.notification.CarAppExtender.Builder setChannelId(String);
+    method public androidx.car.app.notification.CarAppExtender.Builder setColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.notification.CarAppExtender.Builder setContentIntent(android.app.PendingIntent);
+    method public androidx.car.app.notification.CarAppExtender.Builder setContentText(CharSequence);
+    method public androidx.car.app.notification.CarAppExtender.Builder setContentTitle(CharSequence);
+    method public androidx.car.app.notification.CarAppExtender.Builder setDeleteIntent(android.app.PendingIntent);
+    method public androidx.car.app.notification.CarAppExtender.Builder setImportance(int);
+    method public androidx.car.app.notification.CarAppExtender.Builder setLargeIcon(android.graphics.Bitmap);
+    method public androidx.car.app.notification.CarAppExtender.Builder setSmallIcon(int);
+  }
+
+  public final class CarNotificationManager {
+    method public boolean areNotificationsEnabled();
+    method public void cancel(int);
+    method public void cancel(String?, int);
+    method public void cancelAll();
+    method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
+    method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
+    method public void createNotificationChannelGroups(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
+    method public void createNotificationChannels(java.util.List<androidx.core.app.NotificationChannelCompat!>);
+    method public void deleteNotificationChannel(String);
+    method public void deleteNotificationChannelGroup(String);
+    method public void deleteUnlistedNotificationChannels(java.util.Collection<java.lang.String!>);
+    method public static androidx.car.app.notification.CarNotificationManager from(android.content.Context);
+    method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+    method public int getImportance();
+    method public androidx.core.app.NotificationChannelCompat? getNotificationChannel(String);
+    method public androidx.core.app.NotificationChannelCompat? getNotificationChannel(String, String);
+    method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroup(String);
+    method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroups();
+    method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannels();
+    method public void notify(int, androidx.core.app.NotificationCompat.Builder);
+    method public void notify(String?, int, androidx.core.app.NotificationCompat.Builder);
+  }
+
+  public final class CarPendingIntent {
+    method public static android.app.PendingIntent getCarApp(android.content.Context, int, android.content.Intent, int);
+  }
+
+}
+
+package androidx.car.app.serialization {
+
+  public final class Bundleable implements android.os.Parcelable {
+    method public static androidx.car.app.serialization.Bundleable create(Object) throws androidx.car.app.serialization.BundlerException;
+    method public int describeContents();
+    method public Object get() throws androidx.car.app.serialization.BundlerException;
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.car.app.serialization.Bundleable!> CREATOR;
+  }
+
+  public class BundlerException extends java.lang.Exception {
+    ctor public BundlerException(String?);
+    ctor public BundlerException(String?, Throwable);
+  }
+
+}
+
+package androidx.car.app.suggestion {
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public class SuggestionManager implements androidx.car.app.managers.Manager {
+    method @MainThread public void updateSuggestions(java.util.List<androidx.car.app.suggestion.model.Suggestion!>);
+  }
+
+}
+
+package androidx.car.app.suggestion.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Suggestion {
+    method public android.app.PendingIntent? getAction();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public String getIdentifier();
+    method public androidx.car.app.model.CarText? getSubtitle();
+    method public androidx.car.app.model.CarText getTitle();
+  }
+
+  public static final class Suggestion.Builder {
+    ctor public Suggestion.Builder();
+    method public androidx.car.app.suggestion.model.Suggestion build();
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setAction(android.app.PendingIntent);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setIdentifier(String);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setSubtitle(CharSequence);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setTitle(CharSequence);
+  }
+
+}
+
+package androidx.car.app.validation {
+
+  public final class HostValidator {
+    method public java.util.Map<java.lang.String!,java.util.List<java.lang.String!>!> getAllowedHosts();
+    method public boolean isValidHost(androidx.car.app.HostInfo);
+    field public static final androidx.car.app.validation.HostValidator ALLOW_ALL_HOSTS_VALIDATOR;
+    field public static final String TEMPLATE_RENDERER_PERMISSION = "android.car.permission.TEMPLATE_RENDERER";
+  }
+
+  public static final class HostValidator.Builder {
+    ctor public HostValidator.Builder(android.content.Context);
+    method public androidx.car.app.validation.HostValidator.Builder addAllowedHost(String, String);
+    method public androidx.car.app.validation.HostValidator.Builder addAllowedHosts(@ArrayRes int);
+    method public androidx.car.app.validation.HostValidator build();
+  }
+
+}
+
+package androidx.car.app.versioning {
+
+  public final class CarAppApiLevels {
+    method public static int getLatest();
+    method public static int getOldest();
+    field public static final int LEVEL_1 = 1; // 0x1
+    field public static final int LEVEL_2 = 2; // 0x2
+    field public static final int LEVEL_3 = 3; // 0x3
+    field public static final int LEVEL_4 = 4; // 0x4
+    field public static final int LEVEL_5 = 5; // 0x5
+    field public static final int LEVEL_6 = 6; // 0x6
+    field public static final int LEVEL_7 = 7; // 0x7
+  }
+
+}
+
diff --git a/car/app/app/api/current.ignore b/car/app/app/api/current.ignore
deleted file mode 100644
index f83ac12..0000000
--- a/car/app/app/api/current.ignore
+++ /dev/null
@@ -1,51 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.car.app.model.CarSpan:
-    Removed class androidx.car.app.model.CarSpan from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarSpan#CarSpan():
-    Removed constructor androidx.car.app.model.CarSpan() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarSpan#updateDrawState(android.text.TextPaint):
-    Removed method androidx.car.app.model.CarSpan.updateDrawState(android.text.TextPaint) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarSpan#updateDrawState(android.text.TextPaint) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarSpan.updateDrawState(android.text.TextPaint arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper:
-    Removed class androidx.car.app.model.TemplateWrapper from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#copyOf(androidx.car.app.model.TemplateWrapper):
-    Removed method androidx.car.app.model.TemplateWrapper.copyOf(androidx.car.app.model.TemplateWrapper) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#copyOf(androidx.car.app.model.TemplateWrapper) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.copyOf(androidx.car.app.model.TemplateWrapper arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getCurrentTaskStep():
-    Removed method androidx.car.app.model.TemplateWrapper.getCurrentTaskStep() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getId():
-    Removed method androidx.car.app.model.TemplateWrapper.getId() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getTemplate():
-    Removed method androidx.car.app.model.TemplateWrapper.getTemplate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getTemplateInfosForScreenStack():
-    Removed method androidx.car.app.model.TemplateWrapper.getTemplateInfosForScreenStack() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#isRefresh():
-    Removed method androidx.car.app.model.TemplateWrapper.isRefresh() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setCurrentTaskStep(int):
-    Removed method androidx.car.app.model.TemplateWrapper.setCurrentTaskStep(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setCurrentTaskStep(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setCurrentTaskStep(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setId(String):
-    Removed method androidx.car.app.model.TemplateWrapper.setId(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setId(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setId(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setRefresh(boolean):
-    Removed method androidx.car.app.model.TemplateWrapper.setRefresh(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setRefresh(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setRefresh(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setTemplate(androidx.car.app.model.Template):
-    Removed method androidx.car.app.model.TemplateWrapper.setTemplate(androidx.car.app.model.Template) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setTemplate(androidx.car.app.model.Template) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setTemplate(androidx.car.app.model.Template arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template):
-    Removed method androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template, String):
-    Removed method androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template,String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template, String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template arg1, String arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template, String) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template arg1, String arg2) from compatibility checked API surface
diff --git a/car/app/app/api/res-1.4.0-beta02.txt b/car/app/app/api/res-1.4.0-beta02.txt
new file mode 100644
index 0000000..686fc80
--- /dev/null
+++ b/car/app/app/api/res-1.4.0-beta02.txt
@@ -0,0 +1,5 @@
+attr carColorPrimary
+attr carColorPrimaryDark
+attr carColorSecondary
+attr carColorSecondaryDark
+attr carPermissionActivityLayout
diff --git a/car/app/app/api/restricted_1.4.0-beta02.txt b/car/app/app/api/restricted_1.4.0-beta02.txt
new file mode 100644
index 0000000..73c12de
--- /dev/null
+++ b/car/app/app/api/restricted_1.4.0-beta02.txt
@@ -0,0 +1,2210 @@
+// Signature format: 4.0
+package androidx.car.app {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class AppInfo {
+    ctor @VisibleForTesting public AppInfo(int, int, String);
+    method public int getLatestCarAppApiLevel();
+    method public String getLibraryDisplayVersion();
+    method public int getMinCarAppApiLevel();
+    field public static final String MIN_API_LEVEL_METADATA_KEY = "androidx.car.app.minCarApiLevel";
+  }
+
+  public class AppManager implements androidx.car.app.managers.Manager {
+    method @androidx.car.app.annotations.RequiresCarApi(5) public void dismissAlert(int);
+    method public void invalidate();
+    method public void setSurfaceCallback(androidx.car.app.SurfaceCallback?);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public void showAlert(androidx.car.app.model.Alert);
+    method public void showToast(CharSequence, int);
+  }
+
+  public final class CarAppPermission {
+    method public static void checkHasLibraryPermission(android.content.Context, String);
+    method public static void checkHasPermission(android.content.Context, String);
+    field public static final String ACCESS_SURFACE = "androidx.car.app.ACCESS_SURFACE";
+    field public static final String MAP_TEMPLATES = "androidx.car.app.MAP_TEMPLATES";
+    field public static final String NAVIGATION_TEMPLATES = "androidx.car.app.NAVIGATION_TEMPLATES";
+  }
+
+  public abstract class CarAppService extends android.app.Service {
+    ctor public CarAppService();
+    method public abstract androidx.car.app.validation.HostValidator createHostValidator();
+    method @CallSuper public final void dump(java.io.FileDescriptor, java.io.PrintWriter, String![]?);
+    method @Deprecated public final androidx.car.app.Session? getCurrentSession();
+    method public final androidx.car.app.HostInfo? getHostInfo();
+    method public final androidx.car.app.Session? getSession(androidx.car.app.SessionInfo);
+    method @CallSuper public final android.os.IBinder onBind(android.content.Intent);
+    method public androidx.car.app.Session onCreateSession();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.Session onCreateSession(androidx.car.app.SessionInfo);
+    method public final boolean onUnbind(android.content.Intent);
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_CALLING_APP = "androidx.car.app.category.CALLING";
+    field @Deprecated public static final String CATEGORY_CHARGING_APP = "androidx.car.app.category.CHARGING";
+    field @androidx.car.app.annotations.RequiresCarApi(6) public static final String CATEGORY_FEATURE_CLUSTER = "androidx.car.app.category.FEATURE_CLUSTER";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_IOT_APP = "androidx.car.app.category.IOT";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_MESSAGING_APP = "androidx.car.app.category.MESSAGING";
+    field public static final String CATEGORY_NAVIGATION_APP = "androidx.car.app.category.NAVIGATION";
+    field @Deprecated public static final String CATEGORY_PARKING_APP = "androidx.car.app.category.PARKING";
+    field public static final String CATEGORY_POI_APP = "androidx.car.app.category.POI";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_SETTINGS_APP = "androidx.car.app.category.SETTINGS";
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final String CATEGORY_WEATHER_APP = "androidx.car.app.category.WEATHER";
+    field public static final String SERVICE_INTERFACE = "androidx.car.app.CarAppService";
+  }
+
+  public class CarContext extends android.content.ContextWrapper {
+    method public void finishCarApp();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public android.content.ComponentName? getCallingComponent();
+    method public int getCarAppApiLevel();
+    method public <T> T getCarService(Class<T!>);
+    method public Object getCarService(String);
+    method public String getCarServiceName(Class<?>);
+    method public androidx.car.app.HostInfo? getHostInfo();
+    method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+    method public boolean isDarkMode();
+    method public void requestPermissions(java.util.List<java.lang.String!>, androidx.car.app.OnRequestPermissionsListener);
+    method public void requestPermissions(java.util.List<java.lang.String!>, java.util.concurrent.Executor, androidx.car.app.OnRequestPermissionsListener);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public void setCarAppResult(int, android.content.Intent?);
+    method public void startCarApp(android.content.Intent);
+    method @Deprecated public static void startCarApp(android.content.Intent, android.content.Intent);
+    field public static final String ACTION_NAVIGATE = "androidx.car.app.action.NAVIGATE";
+    field public static final String APP_SERVICE = "app";
+    field public static final String CAR_SERVICE = "car";
+    field @androidx.car.app.annotations.RequiresCarApi(2) public static final String CONSTRAINT_SERVICE = "constraints";
+    field public static final String EXTRA_START_CAR_APP_BINDER_KEY = "androidx.car.app.extra.START_CAR_APP_BINDER_KEY";
+    field @androidx.car.app.annotations.RequiresCarApi(3) public static final String HARDWARE_SERVICE = "hardware";
+    field public static final String NAVIGATION_SERVICE = "navigation";
+    field public static final String SCREEN_SERVICE = "screen";
+    field public static final String SUGGESTION_SERVICE = "suggestion";
+  }
+
+  public final class CarToast {
+    method public static androidx.car.app.CarToast makeText(androidx.car.app.CarContext, @StringRes int, int);
+    method public static androidx.car.app.CarToast makeText(androidx.car.app.CarContext, CharSequence, int);
+    method public void setDuration(int);
+    method public void setText(@StringRes int);
+    method public void setText(CharSequence);
+    method public void show();
+    field public static final int LENGTH_LONG = 1; // 0x1
+    field public static final int LENGTH_SHORT = 0; // 0x0
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class FailureResponse {
+    ctor public FailureResponse(Throwable);
+    method public int getErrorType();
+    method public String getStackTrace();
+    field public static final int BUNDLER_EXCEPTION = 1; // 0x1
+    field public static final int ILLEGAL_STATE_EXCEPTION = 2; // 0x2
+    field public static final int INVALID_PARAMETER_EXCEPTION = 3; // 0x3
+    field public static final int REMOTE_EXCEPTION = 6; // 0x6
+    field public static final int RUNTIME_EXCEPTION = 5; // 0x5
+    field public static final int SECURITY_EXCEPTION = 4; // 0x4
+    field public static final int UNKNOWN_ERROR = 0; // 0x0
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class HandshakeInfo {
+    ctor public HandshakeInfo(String, int);
+    method public int getHostCarAppApiLevel();
+    method public String getHostPackageName();
+  }
+
+  public final class HostException extends java.lang.RuntimeException {
+    ctor public HostException(String);
+    ctor public HostException(String, Throwable);
+    ctor public HostException(Throwable);
+  }
+
+  public final class HostInfo {
+    ctor public HostInfo(String, int);
+    method public String getPackageName();
+    method public int getUid();
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnDoneCallback {
+    method public default void onFailure(androidx.car.app.serialization.Bundleable);
+    method public default void onSuccess(androidx.car.app.serialization.Bundleable?);
+  }
+
+  public interface OnRequestPermissionsListener {
+    method public void onRequestPermissionsResult(java.util.List<java.lang.String!>, java.util.List<java.lang.String!>);
+  }
+
+  public interface OnScreenResultListener {
+    method public void onScreenResult(Object?);
+  }
+
+  public abstract class Screen implements androidx.lifecycle.LifecycleOwner {
+    ctor protected Screen(androidx.car.app.CarContext);
+    method public final void finish();
+    method public final androidx.car.app.CarContext getCarContext();
+    method public final androidx.lifecycle.Lifecycle getLifecycle();
+    method public String? getMarker();
+    method public final androidx.car.app.ScreenManager getScreenManager();
+    method public final void invalidate();
+    method public abstract androidx.car.app.model.Template onGetTemplate();
+    method public void setMarker(String?);
+    method public void setResult(Object?);
+  }
+
+  @MainThread public class ScreenManager implements androidx.car.app.managers.Manager {
+    method public java.util.Collection<androidx.car.app.Screen!> getScreenStack();
+    method public int getStackSize();
+    method public androidx.car.app.Screen getTop();
+    method public void pop();
+    method public void popTo(String);
+    method public void popToRoot();
+    method public void push(androidx.car.app.Screen);
+    method public void pushForResult(androidx.car.app.Screen, androidx.car.app.OnScreenResultListener);
+    method public void remove(androidx.car.app.Screen);
+  }
+
+  public abstract class Session implements androidx.lifecycle.LifecycleOwner {
+    ctor public Session();
+    method public final androidx.car.app.CarContext getCarContext();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method public void onCarConfigurationChanged(android.content.res.Configuration);
+    method public abstract androidx.car.app.Screen onCreateScreen(android.content.Intent);
+    method public void onNewIntent(android.content.Intent);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class SessionInfo {
+    ctor public SessionInfo(int, String);
+    method public int getDisplayType();
+    method public String getSessionId();
+    method public java.util.Set<java.lang.Class<? extends androidx.car.app.model.Template>!>? getSupportedTemplates(int);
+    field public static final androidx.car.app.SessionInfo DEFAULT_SESSION_INFO;
+    field public static final int DISPLAY_TYPE_CLUSTER = 1; // 0x1
+    field public static final int DISPLAY_TYPE_MAIN = 0; // 0x0
+  }
+
+  public class SessionInfoIntentEncoder {
+    method public static boolean containsSessionInfo(android.content.Intent);
+    method public static androidx.car.app.SessionInfo decode(android.content.Intent);
+    method public static void encode(androidx.car.app.SessionInfo, android.content.Intent);
+  }
+
+  public interface SurfaceCallback {
+    method @androidx.car.app.annotations.RequiresCarApi(5) public default void onClick(float, float);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public default void onFling(float, float);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public default void onScale(float, float, float);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public default void onScroll(float, float);
+    method public default void onStableAreaChanged(android.graphics.Rect);
+    method public default void onSurfaceAvailable(androidx.car.app.SurfaceContainer);
+    method public default void onSurfaceDestroyed(androidx.car.app.SurfaceContainer);
+    method public default void onVisibleAreaChanged(android.graphics.Rect);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class SurfaceContainer {
+    ctor public SurfaceContainer(android.view.Surface?, int, int, int);
+    method public int getDpi();
+    method public int getHeight();
+    method public android.view.Surface? getSurface();
+    method public int getWidth();
+  }
+
+}
+
+package androidx.car.app.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface CarProtocol {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface ExperimentalCarApi {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public @interface RequiresCarApi {
+    method public abstract int value();
+  }
+
+}
+
+package androidx.car.app.connection {
+
+  public final class CarConnection {
+    ctor @MainThread public CarConnection(android.content.Context);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getType();
+    field public static final String ACTION_CAR_CONNECTION_UPDATED = "androidx.car.app.connection.action.CAR_CONNECTION_UPDATED";
+    field public static final String CAR_CONNECTION_STATE = "CarConnectionState";
+    field public static final int CONNECTION_TYPE_NATIVE = 1; // 0x1
+    field public static final int CONNECTION_TYPE_NOT_CONNECTED = 0; // 0x0
+    field public static final int CONNECTION_TYPE_PROJECTION = 2; // 0x2
+  }
+
+}
+
+package androidx.car.app.constraints {
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public class ConstraintManager implements androidx.car.app.managers.Manager {
+    method public int getContentLimit(int);
+    method @androidx.car.app.annotations.RequiresCarApi(6) public boolean isAppDrivenRefreshEnabled();
+    field public static final int CONTENT_LIMIT_TYPE_GRID = 1; // 0x1
+    field public static final int CONTENT_LIMIT_TYPE_LIST = 0; // 0x0
+    field public static final int CONTENT_LIMIT_TYPE_PANE = 4; // 0x4
+    field public static final int CONTENT_LIMIT_TYPE_PLACE_LIST = 2; // 0x2
+    field public static final int CONTENT_LIMIT_TYPE_ROUTE_LIST = 3; // 0x3
+  }
+
+}
+
+package androidx.car.app.hardware {
+
+  @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarHardwareManager extends androidx.car.app.managers.Manager {
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public default androidx.car.app.hardware.climate.CarClimate getCarClimate();
+    method public default androidx.car.app.hardware.info.CarInfo getCarInfo();
+    method public default androidx.car.app.hardware.info.CarSensors getCarSensors();
+  }
+
+}
+
+package androidx.car.app.hardware.climate {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CabinTemperatureProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!> getCarZoneSetsToCabinCelsiusTemperatureRanges();
+    method public float getCelsiusSupportedIncrement();
+    method public float getFahrenheitSupportedIncrement();
+    method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxCelsiusRange();
+    method public android.util.Pair<java.lang.Float!,java.lang.Float!> getSupportedMinMaxFahrenheitRange();
+    method public boolean hasCarZoneSetsToCabinCelsiusTemperatureRanges();
+    method public boolean hasCelsiusSupportedIncrement();
+    method public boolean hasFahrenheitSupportedIncrement();
+    method public boolean hasSupportedMinMaxCelsiusRange();
+    method public boolean hasSupportedMinMaxFahrenheitRange();
+  }
+
+  public static final class CabinTemperatureProfile.Builder {
+    ctor public CabinTemperatureProfile.Builder();
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile build();
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCarZoneSetsToCabinCelsiusTemperatureRanges(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Float!,java.lang.Float!>!>);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setCelsiusSupportedIncrement(float);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setFahrenheitSupportedIncrement(float);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxCelsiusRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+    method public androidx.car.app.hardware.climate.CabinTemperatureProfile.Builder setSupportedMinMaxFahrenheitRange(android.util.Pair<java.lang.Float!,java.lang.Float!>);
+  }
+
+  @SuppressCompatibility @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimate {
+    method public void fetchClimateProfile(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateProfileRequest, androidx.car.app.hardware.climate.CarClimateProfileCallback);
+    method public void registerClimateStateCallback(java.util.concurrent.Executor, androidx.car.app.hardware.climate.RegisterClimateStateRequest, androidx.car.app.hardware.climate.CarClimateStateCallback);
+    method public <E> void setClimateState(java.util.concurrent.Executor, androidx.car.app.hardware.climate.ClimateStateRequest<E!>, androidx.car.app.hardware.common.CarSetOperationStatusCallback);
+    method public void unregisterClimateStateCallback(androidx.car.app.hardware.climate.CarClimateStateCallback);
+  }
+
+  @SuppressCompatibility @MainThread @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarClimateFeature {
+    method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+    method public int getFeature();
+  }
+
+  public static final class CarClimateFeature.Builder {
+    ctor public CarClimateFeature.Builder(int);
+    method public androidx.car.app.hardware.climate.CarClimateFeature.Builder addCarZones(androidx.car.app.hardware.common.CarZone!...);
+    method public androidx.car.app.hardware.climate.CarClimateFeature build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateProfileCallback {
+    method public default void onCabinTemperatureProfileAvailable(androidx.car.app.hardware.climate.CabinTemperatureProfile);
+    method public default void onCarZoneMappingInfoProfileAvailable(androidx.car.app.hardware.climate.CarZoneMappingInfoProfile);
+    method public default void onDefrosterProfileAvailable(androidx.car.app.hardware.climate.DefrosterProfile);
+    method public default void onElectricDefrosterProfileAvailable(androidx.car.app.hardware.climate.ElectricDefrosterProfile);
+    method public default void onFanDirectionProfileAvailable(androidx.car.app.hardware.climate.FanDirectionProfile);
+    method public default void onFanSpeedLevelProfileAvailable(androidx.car.app.hardware.climate.FanSpeedLevelProfile);
+    method public default void onHvacAcProfileAvailable(androidx.car.app.hardware.climate.HvacAcProfile);
+    method public default void onHvacAutoModeProfileAvailable(androidx.car.app.hardware.climate.HvacAutoModeProfile);
+    method public default void onHvacAutoRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacAutoRecirculationProfile);
+    method public default void onHvacDualModeProfileAvailable(androidx.car.app.hardware.climate.HvacDualModeProfile);
+    method public default void onHvacMaxAcModeProfileAvailable(androidx.car.app.hardware.climate.HvacMaxAcModeProfile);
+    method public default void onHvacPowerProfileAvailable(androidx.car.app.hardware.climate.HvacPowerProfile);
+    method public default void onHvacRecirculationProfileAvailable(androidx.car.app.hardware.climate.HvacRecirculationProfile);
+    method public default void onMaxDefrosterProfileAvailable(androidx.car.app.hardware.climate.MaxDefrosterProfile);
+    method public default void onSeatTemperatureLevelProfileAvailable(androidx.car.app.hardware.climate.SeatTemperatureProfile);
+    method public default void onSeatVentilationLevelProfileAvailable(androidx.car.app.hardware.climate.SeatVentilationProfile);
+    method public default void onSteeringWheelHeatProfileAvailable(androidx.car.app.hardware.climate.SteeringWheelHeatProfile);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarClimateStateCallback {
+    method public default void onCabinTemperatureStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public default void onDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onElectricDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onFanDirectionStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onFanSpeedLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onHvacAcStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacAutoModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacAutoRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacDualModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacMaxAcModeStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacPowerStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onHvacRecirculationStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onMaxDefrosterStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public default void onSeatTemperatureLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onSeatVentilationLevelStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public default void onSteeringWheelHeatStateAvailable(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class CarZoneMappingInfoProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class CarZoneMappingInfoProfile.Builder {
+    ctor public CarZoneMappingInfoProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.CarZoneMappingInfoProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateProfileRequest {
+    method public java.util.Set<java.lang.Integer!> getAllClimateProfiles();
+    method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateProfileFeatures();
+    field public static final int FEATURE_CABIN_TEMPERATURE = 4; // 0x4
+    field public static final int FEATURE_CAR_ZONE_MAPPING = 17; // 0x11
+    field public static final int FEATURE_FAN_DIRECTION = 6; // 0x6
+    field public static final int FEATURE_FAN_SPEED = 5; // 0x5
+    field public static final int FEATURE_HVAC_AC = 2; // 0x2
+    field public static final int FEATURE_HVAC_AUTO_MODE = 12; // 0xc
+    field public static final int FEATURE_HVAC_AUTO_RECIRCULATION = 11; // 0xb
+    field public static final int FEATURE_HVAC_DEFROSTER = 14; // 0xe
+    field public static final int FEATURE_HVAC_DUAL_MODE = 13; // 0xd
+    field public static final int FEATURE_HVAC_ELECTRIC_DEFROSTER = 16; // 0x10
+    field public static final int FEATURE_HVAC_MAX_AC = 3; // 0x3
+    field public static final int FEATURE_HVAC_MAX_DEFROSTER = 15; // 0xf
+    field public static final int FEATURE_HVAC_POWER = 1; // 0x1
+    field public static final int FEATURE_HVAC_RECIRCULATION = 10; // 0xa
+    field public static final int FEATURE_SEAT_TEMPERATURE_LEVEL = 7; // 0x7
+    field public static final int FEATURE_SEAT_VENTILATION_LEVEL = 8; // 0x8
+    field public static final int FEATURE_STEERING_WHEEL_HEAT = 9; // 0x9
+  }
+
+  public static final class ClimateProfileRequest.Builder {
+    ctor public ClimateProfileRequest.Builder();
+    method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder addClimateProfileFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+    method public androidx.car.app.hardware.climate.ClimateProfileRequest build();
+    method public androidx.car.app.hardware.climate.ClimateProfileRequest.Builder setAllClimateProfiles();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class ClimateStateRequest<T> {
+    method public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+    method public int getRequestedFeature();
+    method public T getRequestedValue();
+  }
+
+  public static final class ClimateStateRequest.Builder<T> {
+    ctor public ClimateStateRequest.Builder(int, T!);
+    method public androidx.car.app.hardware.climate.ClimateStateRequest.Builder<T!> addCarZones(androidx.car.app.hardware.common.CarZone);
+    method public androidx.car.app.hardware.climate.ClimateStateRequest<T!> build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class DefrosterProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class DefrosterProfile.Builder {
+    ctor public DefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.DefrosterProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class ElectricDefrosterProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class ElectricDefrosterProfile.Builder {
+    ctor public ElectricDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.ElectricDefrosterProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class FanDirectionProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!> getCarZoneSetsToFanDirectionValues();
+  }
+
+  public static final class FanDirectionProfile.Builder {
+    ctor public FanDirectionProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,java.util.Set<java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.FanDirectionProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class FanSpeedLevelProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToFanSpeedLevelRanges();
+  }
+
+  public static final class FanSpeedLevelProfile.Builder {
+    ctor public FanSpeedLevelProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.FanSpeedLevelProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAcProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacAcProfile.Builder {
+    ctor public HvacAcProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacAcProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoModeProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacAutoModeProfile.Builder {
+    ctor public HvacAutoModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacAutoModeProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacAutoRecirculationProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacAutoRecirculationProfile.Builder {
+    ctor public HvacAutoRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacAutoRecirculationProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacDualModeProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacDualModeProfile.Builder {
+    ctor public HvacDualModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacDualModeProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacMaxAcModeProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacMaxAcModeProfile.Builder {
+    ctor public HvacMaxAcModeProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacMaxAcModeProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacPowerProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class HvacPowerProfile.Builder {
+    ctor public HvacPowerProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacPowerProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class HvacRecirculationProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZones();
+  }
+
+  public static final class HvacRecirculationProfile.Builder {
+    ctor public HvacRecirculationProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.HvacRecirculationProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class MaxDefrosterProfile {
+    method public java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!> getSupportedCarZoneSets();
+  }
+
+  public static final class MaxDefrosterProfile.Builder {
+    ctor public MaxDefrosterProfile.Builder(java.util.List<java.util.Set<androidx.car.app.hardware.common.CarZone!>!>);
+    method public androidx.car.app.hardware.climate.MaxDefrosterProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class RegisterClimateStateRequest {
+    method public java.util.List<androidx.car.app.hardware.climate.CarClimateFeature!> getClimateRegisterFeatures();
+  }
+
+  public static final class RegisterClimateStateRequest.Builder {
+    ctor public RegisterClimateStateRequest.Builder(boolean);
+    method public androidx.car.app.hardware.climate.RegisterClimateStateRequest.Builder addClimateRegisterFeatures(androidx.car.app.hardware.climate.CarClimateFeature!...);
+    method public androidx.car.app.hardware.climate.RegisterClimateStateRequest build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class SeatTemperatureProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatTemperatureValues();
+  }
+
+  public static final class SeatTemperatureProfile.Builder {
+    ctor public SeatTemperatureProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.SeatTemperatureProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class SeatVentilationProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSeatVentilationValues();
+  }
+
+  public static final class SeatVentilationProfile.Builder {
+    ctor public SeatVentilationProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.SeatVentilationProfile build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public final class SteeringWheelHeatProfile {
+    method public java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!> getCarZoneSetsToSteeringWheelHeatValues();
+  }
+
+  public static final class SteeringWheelHeatProfile.Builder {
+    ctor public SteeringWheelHeatProfile.Builder(java.util.Map<java.util.Set<androidx.car.app.hardware.common.CarZone!>!,android.util.Pair<java.lang.Integer!,java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.climate.SteeringWheelHeatProfile build();
+  }
+
+}
+
+package androidx.car.app.hardware.common {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public interface CarSetOperationStatusCallback {
+    method public default void onSetCarClimateStateCabinTemperature(int);
+    method public default void onSetCarClimateStateDefroster(int);
+    method public default void onSetCarClimateStateElectricDefroster(int);
+    method public default void onSetCarClimateStateFanDirection(int);
+    method public default void onSetCarClimateStateFanSpeedLevel(int);
+    method public default void onSetCarClimateStateHvacAc(int);
+    method public default void onSetCarClimateStateHvacAutoMode(int);
+    method public default void onSetCarClimateStateHvacAutoRecirculation(int);
+    method public default void onSetCarClimateStateHvacDualMode(int);
+    method public default void onSetCarClimateStateHvacMaxAcMode(int);
+    method public default void onSetCarClimateStateHvacPower(int);
+    method public default void onSetCarClimateStateHvacRecirculation(int);
+    method public default void onSetCarClimateStateMaxDefroster(int);
+    method public default void onSetCarClimateStateSeatTemperatureLevel(int);
+    method public default void onSetCarClimateStateSeatVentilationLevel(int);
+    method public default void onSetCarClimateStateSteeringWheelHeat(int);
+    method public static String toString(int);
+    field public static final int OPERATION_STATUS_FEATURE_SETTING_NOT_ALLOWED = 4; // 0x4
+    field public static final int OPERATION_STATUS_FEATURE_TEMPORARILY_UNAVAILABLE = 3; // 0x3
+    field public static final int OPERATION_STATUS_FEATURE_UNIMPLEMENTED = 1; // 0x1
+    field public static final int OPERATION_STATUS_FEATURE_UNSUPPORTED = 2; // 0x2
+    field public static final int OPERATION_STATUS_ILLEGAL_CAR_HARDWARE_STATE = 7; // 0x7
+    field public static final int OPERATION_STATUS_INSUFFICIENT_PERMISSION = 6; // 0x6
+    field public static final int OPERATION_STATUS_SUCCESS = 0; // 0x0
+    field public static final int OPERATION_STATUS_UNSUPPORTED_VALUE = 5; // 0x5
+    field public static final int OPERATION_STATUS_UPDATE_TIMEOUT = 8; // 0x8
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarUnit {
+    method public static String toString(int);
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int IMPERIAL_GALLON = 204; // 0xcc
+    field public static final int KILOMETER = 3; // 0x3
+    field public static final int KILOMETERS_PER_HOUR = 102; // 0x66
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int LITER = 202; // 0xca
+    field public static final int METER = 2; // 0x2
+    field public static final int METERS_PER_SEC = 101; // 0x65
+    field public static final int MILE = 4; // 0x4
+    field public static final int MILES_PER_HOUR = 103; // 0x67
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int MILLILITER = 201; // 0xc9
+    field public static final int MILLIMETER = 1; // 0x1
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int US_GALLON = 203; // 0xcb
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarValue<T> {
+    ctor public CarValue(T?, long, int);
+    ctor @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public CarValue(T?, long, int, java.util.List<androidx.car.app.hardware.common.CarZone!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public java.util.List<androidx.car.app.hardware.common.CarZone!> getCarZones();
+    method public int getStatus();
+    method public long getTimestampMillis();
+    method public T? getValue();
+    field public static final int STATUS_SUCCESS = 1; // 0x1
+    field public static final int STATUS_UNAVAILABLE = 3; // 0x3
+    field public static final int STATUS_UNIMPLEMENTED = 2; // 0x2
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(5) public final class CarZone {
+    method public int getColumn();
+    method public int getRow();
+    field public static final int CAR_ZONE_COLUMN_ALL = 16; // 0x10
+    field public static final int CAR_ZONE_COLUMN_CENTER = 48; // 0x30
+    field public static final int CAR_ZONE_COLUMN_DRIVER = 80; // 0x50
+    field public static final int CAR_ZONE_COLUMN_LEFT = 32; // 0x20
+    field public static final int CAR_ZONE_COLUMN_PASSENGER = 96; // 0x60
+    field public static final int CAR_ZONE_COLUMN_RIGHT = 64; // 0x40
+    field public static final androidx.car.app.hardware.common.CarZone CAR_ZONE_GLOBAL;
+    field public static final int CAR_ZONE_ROW_ALL = 0; // 0x0
+    field public static final int CAR_ZONE_ROW_EXCLUDE_FIRST = 4; // 0x4
+    field public static final int CAR_ZONE_ROW_FIRST = 1; // 0x1
+    field public static final int CAR_ZONE_ROW_SECOND = 2; // 0x2
+    field public static final int CAR_ZONE_ROW_THIRD = 3; // 0x3
+  }
+
+  public static final class CarZone.Builder {
+    ctor public CarZone.Builder();
+    method public androidx.car.app.hardware.common.CarZone build();
+    method public androidx.car.app.hardware.common.CarZone.Builder setColumn(int);
+    method public androidx.car.app.hardware.common.CarZone.Builder setRow(int);
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public interface OnCarDataAvailableListener<T> {
+    method public void onCarDataAvailable(T);
+  }
+
+}
+
+package androidx.car.app.hardware.info {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Accelerometer {
+    ctor public Accelerometer(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getForces();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class CarHardwareLocation {
+    ctor public CarHardwareLocation(androidx.car.app.hardware.common.CarValue<android.location.Location!>);
+    method public androidx.car.app.hardware.common.CarValue<android.location.Location!> getLocation();
+  }
+
+  @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarInfo {
+    method public void addEnergyLevelListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public void addEvStatusListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
+    method public void addMileageListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
+    method public void addSpeedListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
+    method public void addTollListener(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
+    method public void fetchEnergyProfile(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyProfile!>);
+    method public void fetchModel(java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Model!>);
+    method public void removeEnergyLevelListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EnergyLevel!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public void removeEvStatusListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.EvStatus!>);
+    method public void removeMileageListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Mileage!>);
+    method public void removeSpeedListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Speed!>);
+    method public void removeTollListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.TollCard!>);
+  }
+
+  @MainThread @androidx.car.app.annotations.RequiresCarApi(3) public interface CarSensors {
+    method public void addAccelerometerListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Accelerometer!>);
+    method public void addCarHardwareLocationListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.CarHardwareLocation!>);
+    method public void addCompassListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Compass!>);
+    method public void addGyroscopeListener(int, java.util.concurrent.Executor, androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Gyroscope!>);
+    method public void removeAccelerometerListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Accelerometer!>);
+    method public void removeCarHardwareLocationListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.CarHardwareLocation!>);
+    method public void removeCompassListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Compass!>);
+    method public void removeGyroscopeListener(androidx.car.app.hardware.common.OnCarDataAvailableListener<androidx.car.app.hardware.info.Gyroscope!>);
+    field public static final int UPDATE_RATE_FASTEST = 3; // 0x3
+    field public static final int UPDATE_RATE_NORMAL = 1; // 0x1
+    field public static final int UPDATE_RATE_UI = 2; // 0x2
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Compass {
+    ctor public Compass(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getOrientations();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class EnergyLevel {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getBatteryPercent();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEnergyIsLow();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getFuelPercent();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getFuelVolumeDisplayUnit();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRangeRemainingMeters();
+  }
+
+  public static final class EnergyLevel.Builder {
+    ctor public EnergyLevel.Builder();
+    method public androidx.car.app.hardware.info.EnergyLevel build();
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setBatteryPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.hardware.info.EnergyLevel.Builder setFuelVolumeDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public androidx.car.app.hardware.info.EnergyLevel.Builder setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class EnergyProfile {
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!> getEvConnectorTypes();
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!> getFuelTypes();
+    field public static final int EVCONNECTOR_TYPE_CHADEMO = 3; // 0x3
+    field public static final int EVCONNECTOR_TYPE_COMBO_1 = 4; // 0x4
+    field public static final int EVCONNECTOR_TYPE_COMBO_2 = 5; // 0x5
+    field public static final int EVCONNECTOR_TYPE_GBT = 9; // 0x9
+    field public static final int EVCONNECTOR_TYPE_GBT_DC = 10; // 0xa
+    field public static final int EVCONNECTOR_TYPE_J1772 = 1; // 0x1
+    field public static final int EVCONNECTOR_TYPE_MENNEKES = 2; // 0x2
+    field public static final int EVCONNECTOR_TYPE_OTHER = 101; // 0x65
+    field public static final int EVCONNECTOR_TYPE_SCAME = 11; // 0xb
+    field public static final int EVCONNECTOR_TYPE_TESLA_HPWC = 7; // 0x7
+    field public static final int EVCONNECTOR_TYPE_TESLA_ROADSTER = 6; // 0x6
+    field public static final int EVCONNECTOR_TYPE_TESLA_SUPERCHARGER = 8; // 0x8
+    field public static final int EVCONNECTOR_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int FUEL_TYPE_BIODIESEL = 5; // 0x5
+    field public static final int FUEL_TYPE_CNG = 8; // 0x8
+    field public static final int FUEL_TYPE_DIESEL_1 = 3; // 0x3
+    field public static final int FUEL_TYPE_DIESEL_2 = 4; // 0x4
+    field public static final int FUEL_TYPE_E85 = 6; // 0x6
+    field public static final int FUEL_TYPE_ELECTRIC = 10; // 0xa
+    field public static final int FUEL_TYPE_HYDROGEN = 11; // 0xb
+    field public static final int FUEL_TYPE_LEADED = 2; // 0x2
+    field public static final int FUEL_TYPE_LNG = 9; // 0x9
+    field public static final int FUEL_TYPE_LPG = 7; // 0x7
+    field public static final int FUEL_TYPE_OTHER = 12; // 0xc
+    field public static final int FUEL_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int FUEL_TYPE_UNLEADED = 1; // 0x1
+  }
+
+  public static final class EnergyProfile.Builder {
+    ctor public EnergyProfile.Builder();
+    method public androidx.car.app.hardware.info.EnergyProfile build();
+    method public androidx.car.app.hardware.info.EnergyProfile.Builder setEvConnectorTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
+    method public androidx.car.app.hardware.info.EnergyProfile.Builder setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer!>!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public class EvStatus {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortConnected();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Boolean!> getEvChargePortOpen();
+  }
+
+  public static final class EvStatus.Builder {
+    ctor public EvStatus.Builder();
+    method public androidx.car.app.hardware.info.EvStatus build();
+    method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortConnected(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+    method public androidx.car.app.hardware.info.EvStatus.Builder setEvChargePortOpen(androidx.car.app.hardware.common.CarValue<java.lang.Boolean!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Gyroscope {
+    ctor public Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!>);
+    method public androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float!>!> getRotations();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Mileage {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getDistanceDisplayUnit();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getOdometerMeters();
+  }
+
+  public static final class Mileage.Builder {
+    ctor public Mileage.Builder();
+    method public androidx.car.app.hardware.info.Mileage build();
+    method public androidx.car.app.hardware.info.Mileage.Builder setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+    method public androidx.car.app.hardware.info.Mileage.Builder setOdometerMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Model {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.String!> getManufacturer();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.String!> getName();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getYear();
+  }
+
+  public static final class Model.Builder {
+    ctor public Model.Builder();
+    method public androidx.car.app.hardware.info.Model build();
+    method public androidx.car.app.hardware.info.Model.Builder setManufacturer(androidx.car.app.hardware.common.CarValue<java.lang.String!>);
+    method public androidx.car.app.hardware.info.Model.Builder setName(androidx.car.app.hardware.common.CarValue<java.lang.String!>);
+    method public androidx.car.app.hardware.info.Model.Builder setYear(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class Speed {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getDisplaySpeedMetersPerSecond();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Float!> getRawSpeedMetersPerSecond();
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getSpeedDisplayUnit();
+  }
+
+  public static final class Speed.Builder {
+    ctor public Speed.Builder();
+    method public androidx.car.app.hardware.info.Speed build();
+    method public androidx.car.app.hardware.info.Speed.Builder setDisplaySpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public androidx.car.app.hardware.info.Speed.Builder setRawSpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float!>);
+    method public androidx.car.app.hardware.info.Speed.Builder setSpeedDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(3) public final class TollCard {
+    method public androidx.car.app.hardware.common.CarValue<java.lang.Integer!> getCardState();
+    field public static final int TOLLCARD_STATE_INVALID = 2; // 0x2
+    field public static final int TOLLCARD_STATE_NOT_INSERTED = 3; // 0x3
+    field public static final int TOLLCARD_STATE_UNKNOWN = 0; // 0x0
+    field public static final int TOLLCARD_STATE_VALID = 1; // 0x1
+  }
+
+  public static final class TollCard.Builder {
+    ctor public TollCard.Builder();
+    method public androidx.car.app.hardware.info.TollCard build();
+    method public androidx.car.app.hardware.info.TollCard.Builder setCardState(androidx.car.app.hardware.common.CarValue<java.lang.Integer!>);
+  }
+
+}
+
+package androidx.car.app.managers {
+
+  public interface Manager {
+  }
+
+}
+
+package androidx.car.app.media {
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public interface CarAudioCallback {
+    method public void onStopRecording();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public class CarAudioCallbackDelegate {
+    method public void onStopRecording();
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public abstract class CarAudioRecord {
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.car.app.media.CarAudioRecord create(androidx.car.app.CarContext);
+    method public int read(byte[], int, int);
+    method public void startRecording();
+    method public void stopRecording();
+    field public static final int AUDIO_CONTENT_BUFFER_SIZE = 512; // 0x200
+    field public static final String AUDIO_CONTENT_MIME = "audio/l16";
+    field public static final int AUDIO_CONTENT_SAMPLING_RATE = 16000; // 0x3e80
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class OpenMicrophoneRequest {
+    method public androidx.car.app.media.CarAudioCallbackDelegate getCarAudioCallbackDelegate();
+  }
+
+  public static final class OpenMicrophoneRequest.Builder {
+    ctor public OpenMicrophoneRequest.Builder(androidx.car.app.media.CarAudioCallback);
+    method public androidx.car.app.media.OpenMicrophoneRequest build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class OpenMicrophoneResponse {
+    method public androidx.car.app.media.CarAudioCallbackDelegate getCarAudioCallback();
+    method public java.io.InputStream getCarMicrophoneInputStream();
+  }
+
+  public static final class OpenMicrophoneResponse.Builder {
+    ctor public OpenMicrophoneResponse.Builder(androidx.car.app.media.CarAudioCallback);
+    method public androidx.car.app.media.OpenMicrophoneResponse build();
+    method public androidx.car.app.media.OpenMicrophoneResponse.Builder setCarMicrophoneDescriptor(android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package androidx.car.app.mediaextensions {
+
+  public final class MetadataExtras {
+    field public static final String KEY_CONTENT_FORMAT_DARK_MODE_LARGE_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_DARK_MODE_LARGE_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_DARK_MODE_SMALL_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_DARK_MODE_SMALL_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_LIGHT_MODE_LARGE_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_LIGHT_MODE_LARGE_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_LIGHT_MODE_SMALL_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_LIGHT_MODE_SMALL_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI";
+    field public static final String KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI = "androidx.car.app.mediaextensions.KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI";
+    field public static final String KEY_DESCRIPTION_LINK_MEDIA_ID = "androidx.car.app.mediaextensions.KEY_DESCRIPTION_LINK_MEDIA_ID";
+    field public static final String KEY_IMMERSIVE_AUDIO = "androidx.car.app.mediaextensions.KEY_IMMERSIVE_AUDIO";
+    field public static final String KEY_SUBTITLE_LINK_MEDIA_ID = "androidx.car.app.mediaextensions.KEY_SUBTITLE_LINK_MEDIA_ID";
+  }
+
+}
+
+package androidx.car.app.messaging {
+
+  @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public class MessagingServiceConstants {
+    field public static final String ACTION_HANDLE_CAR_MESSAGING = "androidx.car.app.messaging.action.HANDLE_CAR_MESSAGING";
+  }
+
+}
+
+package androidx.car.app.messaging.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class CarMessage {
+    method public androidx.car.app.model.CarText? getBody();
+    method public String? getMultimediaMimeType();
+    method public android.net.Uri? getMultimediaUri();
+    method public long getReceivedTimeEpochMillis();
+    method public androidx.core.app.Person? getSender();
+    method public boolean isRead();
+  }
+
+  public static final class CarMessage.Builder {
+    ctor public CarMessage.Builder();
+    method public androidx.car.app.messaging.model.CarMessage build();
+    method public androidx.car.app.messaging.model.CarMessage.Builder setBody(androidx.car.app.model.CarText?);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setMultimediaMimeType(String?);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setMultimediaUri(android.net.Uri?);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setRead(boolean);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setReceivedTimeEpochMillis(long);
+    method public androidx.car.app.messaging.model.CarMessage.Builder setSender(androidx.core.app.Person?);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public interface ConversationCallback {
+    method public void onMarkAsRead();
+    method public void onTextReply(String);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public interface ConversationCallbackDelegate {
+    method public void sendMarkAsRead(androidx.car.app.OnDoneCallback);
+    method public void sendTextReply(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class ConversationItem implements androidx.car.app.model.Item {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.messaging.model.ConversationCallbackDelegate getConversationCallbackDelegate();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public String getId();
+    method public java.util.List<androidx.car.app.messaging.model.CarMessage!> getMessages();
+    method public androidx.core.app.Person getSelf();
+    method public androidx.car.app.model.CarText getTitle();
+    method public boolean isGroupConversation();
+  }
+
+  public static final class ConversationItem.Builder {
+    ctor public ConversationItem.Builder();
+    ctor public ConversationItem.Builder(androidx.car.app.messaging.model.ConversationItem);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.messaging.model.ConversationItem build();
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setConversationCallback(androidx.car.app.messaging.model.ConversationCallback);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setGroupConversation(boolean);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setId(String);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setMessages(java.util.List<androidx.car.app.messaging.model.CarMessage!>);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setSelf(androidx.core.app.Person);
+    method public androidx.car.app.messaging.model.ConversationItem.Builder setTitle(androidx.car.app.model.CarText);
+  }
+
+}
+
+package androidx.car.app.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Action {
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public int getFlags();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public int getType();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
+    method public boolean isStandard();
+    method public static String typeToString(int);
+    field public static final androidx.car.app.model.Action APP_ICON;
+    field public static final androidx.car.app.model.Action BACK;
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final androidx.car.app.model.Action COMPOSE_MESSAGE;
+    field @androidx.car.app.annotations.RequiresCarApi(5) public static final int FLAG_DEFAULT = 4; // 0x4
+    field @androidx.car.app.annotations.RequiresCarApi(5) public static final int FLAG_IS_PERSISTENT = 2; // 0x2
+    field @androidx.car.app.annotations.RequiresCarApi(4) public static final int FLAG_PRIMARY = 1; // 0x1
+    field public static final androidx.car.app.model.Action PAN;
+    field public static final int TYPE_APP_ICON = 65538; // 0x10002
+    field public static final int TYPE_BACK = 65539; // 0x10003
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int TYPE_COMPOSE_MESSAGE = 65541; // 0x10005
+    field public static final int TYPE_CUSTOM = 1; // 0x1
+    field public static final int TYPE_PAN = 65540; // 0x10004
+  }
+
+  public static final class Action.Builder {
+    ctor public Action.Builder();
+    ctor @androidx.car.app.annotations.RequiresCarApi(2) public Action.Builder(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Action build();
+    method public androidx.car.app.model.Action.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Action.Builder setEnabled(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Action.Builder setFlags(int);
+    method public androidx.car.app.model.Action.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Action.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.Action.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Action.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ActionStrip {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getFirstActionOfType(int);
+  }
+
+  public static final class ActionStrip.Builder {
+    ctor public ActionStrip.Builder();
+    method public androidx.car.app.model.ActionStrip.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.ActionStrip build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class Alert {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.AlertCallbackDelegate? getCallbackDelegate();
+    method public long getDurationMillis();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public int getId();
+    method public androidx.car.app.model.CarText? getSubtitle();
+    method public androidx.car.app.model.CarText getTitle();
+  }
+
+  public static final class Alert.Builder {
+    ctor public Alert.Builder(int, androidx.car.app.model.CarText, long);
+    method public androidx.car.app.model.Alert.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Alert build();
+    method public androidx.car.app.model.Alert.Builder setCallback(androidx.car.app.model.AlertCallback);
+    method public androidx.car.app.model.Alert.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Alert.Builder setSubtitle(androidx.car.app.model.CarText);
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface AlertCallback {
+    method public void onCancel(int);
+    method public void onDismiss();
+    field public static final int REASON_NOT_SUPPORTED = 3; // 0x3
+    field public static final int REASON_TIMEOUT = 1; // 0x1
+    field public static final int REASON_USER_ACTION = 2; // 0x2
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface AlertCallbackDelegate {
+    method public void sendCancel(int, androidx.car.app.OnDoneCallback);
+    method public void sendDismiss(androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public class Badge {
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public boolean hasDot();
+  }
+
+  public static final class Badge.Builder {
+    ctor public Badge.Builder();
+    method public androidx.car.app.model.Badge build();
+    method public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.Badge.Builder setHasDot(boolean);
+    method public androidx.car.app.model.Badge.Builder setIcon(androidx.car.app.model.CarIcon);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarColor {
+    method public static androidx.car.app.model.CarColor createCustom(@ColorInt int, @ColorInt int);
+    method @ColorInt public int getColor();
+    method @ColorInt public int getColorDark();
+    method public int getType();
+    field public static final androidx.car.app.model.CarColor BLUE;
+    field public static final androidx.car.app.model.CarColor DEFAULT;
+    field public static final androidx.car.app.model.CarColor GREEN;
+    field public static final androidx.car.app.model.CarColor PRIMARY;
+    field public static final androidx.car.app.model.CarColor RED;
+    field public static final androidx.car.app.model.CarColor SECONDARY;
+    field public static final int TYPE_BLUE = 6; // 0x6
+    field public static final int TYPE_CUSTOM = 0; // 0x0
+    field public static final int TYPE_DEFAULT = 1; // 0x1
+    field public static final int TYPE_GREEN = 5; // 0x5
+    field public static final int TYPE_PRIMARY = 2; // 0x2
+    field public static final int TYPE_RED = 4; // 0x4
+    field public static final int TYPE_SECONDARY = 3; // 0x3
+    field public static final int TYPE_YELLOW = 7; // 0x7
+    field public static final androidx.car.app.model.CarColor YELLOW;
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarIcon {
+    method public androidx.core.graphics.drawable.IconCompat? getIcon();
+    method public androidx.car.app.model.CarColor? getTint();
+    method public int getType();
+    field public static final androidx.car.app.model.CarIcon ALERT;
+    field public static final androidx.car.app.model.CarIcon APP_ICON;
+    field public static final androidx.car.app.model.CarIcon BACK;
+    field @androidx.car.app.annotations.RequiresCarApi(7) public static final androidx.car.app.model.CarIcon COMPOSE_MESSAGE;
+    field public static final androidx.car.app.model.CarIcon ERROR;
+    field @androidx.car.app.annotations.RequiresCarApi(2) public static final androidx.car.app.model.CarIcon PAN;
+    field public static final int TYPE_ALERT = 4; // 0x4
+    field public static final int TYPE_APP_ICON = 5; // 0x5
+    field public static final int TYPE_BACK = 3; // 0x3
+    field public static final int TYPE_COMPOSE_MESSAGE = 8; // 0x8
+    field public static final int TYPE_CUSTOM = 1; // 0x1
+    field public static final int TYPE_ERROR = 6; // 0x6
+    field public static final int TYPE_PAN = 7; // 0x7
+  }
+
+  public static final class CarIcon.Builder {
+    ctor public CarIcon.Builder(androidx.car.app.model.CarIcon);
+    ctor public CarIcon.Builder(androidx.core.graphics.drawable.IconCompat);
+    method public androidx.car.app.model.CarIcon build();
+    method public androidx.car.app.model.CarIcon.Builder setTint(androidx.car.app.model.CarColor);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarIconSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.CarIconSpan create(androidx.car.app.model.CarIcon);
+    method public static androidx.car.app.model.CarIconSpan create(androidx.car.app.model.CarIcon, int);
+    method public int getAlignment();
+    method public androidx.car.app.model.CarIcon getIcon();
+    field public static final int ALIGN_BASELINE = 1; // 0x1
+    field public static final int ALIGN_BOTTOM = 0; // 0x0
+    field public static final int ALIGN_CENTER = 2; // 0x2
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarLocation {
+    method public static androidx.car.app.model.CarLocation create(android.location.Location);
+    method public static androidx.car.app.model.CarLocation create(double, double);
+    method public double getLatitude();
+    method public double getLongitude();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public class CarSpan extends android.text.style.CharacterStyle {
+    ctor public CarSpan();
+    method public void updateDrawState(android.text.TextPaint);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarText {
+    method public static androidx.car.app.model.CarText create(CharSequence);
+    method public java.util.List<java.lang.CharSequence!> getVariants();
+    method public boolean isEmpty();
+    method public static boolean isNullOrEmpty(androidx.car.app.model.CarText?);
+    method public CharSequence toCharSequence();
+  }
+
+  @SuppressCompatibility public static final class CarText.Builder {
+    ctor public CarText.Builder(CharSequence);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.CarText.Builder addVariant(CharSequence);
+    method public androidx.car.app.model.CarText build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(2) public final class ClickableSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.ClickableSpan create(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.OnClickDelegate getOnClickDelegate();
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public interface Content {
+    method public String getContentId();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class DateTimeWithZone {
+    method @RequiresApi(26) public static androidx.car.app.model.DateTimeWithZone create(java.time.ZonedDateTime);
+    method public static androidx.car.app.model.DateTimeWithZone create(long, @IntRange(from=0xffff02e0, to=64800) int, String);
+    method public static androidx.car.app.model.DateTimeWithZone create(long, java.util.TimeZone);
+    method public long getTimeSinceEpochMillis();
+    method public int getZoneOffsetSeconds();
+    method public String? getZoneShortName();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Distance {
+    method public static androidx.car.app.model.Distance create(double, int);
+    method public double getDisplayDistance();
+    method public int getDisplayUnit();
+    field public static final int UNIT_FEET = 6; // 0x6
+    field public static final int UNIT_KILOMETERS = 2; // 0x2
+    field public static final int UNIT_KILOMETERS_P1 = 3; // 0x3
+    field public static final int UNIT_METERS = 1; // 0x1
+    field public static final int UNIT_MILES = 4; // 0x4
+    field public static final int UNIT_MILES_P1 = 5; // 0x5
+    field public static final int UNIT_YARDS = 7; // 0x7
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class DistanceSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.DistanceSpan create(androidx.car.app.model.Distance);
+    method public androidx.car.app.model.Distance getDistance();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class DurationSpan extends androidx.car.app.model.CarSpan {
+    method @RequiresApi(26) public static androidx.car.app.model.DurationSpan create(java.time.Duration);
+    method public static androidx.car.app.model.DurationSpan create(long);
+    method public long getDurationSeconds();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ForegroundCarColorSpan extends androidx.car.app.model.CarSpan {
+    method public static androidx.car.app.model.ForegroundCarColorSpan create(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.CarColor getColor();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class GridItem implements androidx.car.app.model.Item {
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.Badge? getBadge();
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public int getImageType();
+    method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
+    method public androidx.car.app.model.CarText? getText();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+    field public static final int IMAGE_TYPE_ICON = 1; // 0x1
+    field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
+  }
+
+  public static final class GridItem.Builder {
+    ctor public GridItem.Builder();
+    method public androidx.car.app.model.GridItem build();
+    method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, androidx.car.app.model.Badge);
+    method public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridItem.Builder setImage(androidx.car.app.model.CarIcon, int, androidx.car.app.model.Badge);
+    method public androidx.car.app.model.GridItem.Builder setLoading(boolean);
+    method public androidx.car.app.model.GridItem.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.GridItem.Builder setText(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.GridItem.Builder setText(CharSequence);
+    method public androidx.car.app.model.GridItem.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.GridItem.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class GridTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemImageShape();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public int getItemSize();
+    method public androidx.car.app.model.ItemList? getSingleList();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_CIRCLE = 2; // 0x2
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_IMAGE_SHAPE_UNSET = 1; // 0x1
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_LARGE = 4; // 0x4
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_MEDIUM = 2; // 0x2
+    field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public static final int ITEM_SIZE_SMALL = 1; // 0x1
+  }
+
+  public static final class GridTemplate.Builder {
+    ctor public GridTemplate.Builder();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.GridTemplate build();
+    method public androidx.car.app.model.GridTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.GridTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemImageShape(@SuppressCompatibility int);
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public androidx.car.app.model.GridTemplate.Builder setItemSize(@SuppressCompatibility int);
+    method public androidx.car.app.model.GridTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.GridTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.GridTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class Header {
+    method public java.util.List<androidx.car.app.model.Action!> getEndHeaderActions();
+    method public androidx.car.app.model.Action? getStartHeaderAction();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  public static final class Header.Builder {
+    ctor public Header.Builder();
+    method public androidx.car.app.model.Header.Builder addEndHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Header build();
+    method public androidx.car.app.model.Header.Builder setStartHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Header.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Header.Builder setTitle(CharSequence);
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallback {
+    method public default void onInputSubmitted(String);
+    method public default void onInputTextChanged(String);
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public interface InputCallbackDelegate {
+    method public void sendInputSubmitted(String, androidx.car.app.OnDoneCallback);
+    method public void sendInputTextChanged(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface Item {
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ItemList {
+    method public java.util.List<androidx.car.app.model.Item!> getItems();
+    method public androidx.car.app.model.CarText? getNoItemsMessage();
+    method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
+    method public androidx.car.app.model.OnSelectedDelegate? getOnSelectedDelegate();
+    method public int getSelectedIndex();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder toBuilder();
+  }
+
+  public static final class ItemList.Builder {
+    ctor public ItemList.Builder();
+    method public androidx.car.app.model.ItemList.Builder addItem(androidx.car.app.model.Item);
+    method public androidx.car.app.model.ItemList build();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder clearItems();
+    method public androidx.car.app.model.ItemList.Builder setNoItemsMessage(CharSequence);
+    method public androidx.car.app.model.ItemList.Builder setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener);
+    method public androidx.car.app.model.ItemList.Builder setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener);
+    method public androidx.car.app.model.ItemList.Builder setSelectedIndex(@IntRange(from=0) int);
+  }
+
+  public static interface ItemList.OnItemVisibilityChangedListener {
+    method public void onItemVisibilityChanged(int, int);
+  }
+
+  public static interface ItemList.OnSelectedListener {
+    method public void onSelected(int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ListTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public java.util.List<androidx.car.app.model.SectionedItemList!> getSectionedLists();
+    method public androidx.car.app.model.ItemList? getSingleList();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder toBuilder();
+  }
+
+  public static final class ListTemplate.Builder {
+    ctor public ListTemplate.Builder();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.ListTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.ListTemplate.Builder addSectionedList(androidx.car.app.model.SectionedItemList);
+    method public androidx.car.app.model.ListTemplate build();
+    method @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder clearSectionedLists();
+    method public androidx.car.app.model.ListTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.ListTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.ListTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.ListTemplate.Builder setSingleList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.ListTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class LongMessageTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.CarText getMessage();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public static final class LongMessageTemplate.Builder {
+    ctor public LongMessageTemplate.Builder(CharSequence);
+    method public androidx.car.app.model.LongMessageTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.LongMessageTemplate build();
+    method public androidx.car.app.model.LongMessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.LongMessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.LongMessageTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class MessageTemplate implements androidx.car.app.model.Template {
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.CarText? getDebugMessage();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public androidx.car.app.model.CarText getMessage();
+    method public androidx.car.app.model.CarText? getTitle();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public boolean isLoading();
+  }
+
+  public static final class MessageTemplate.Builder {
+    ctor public MessageTemplate.Builder(androidx.car.app.model.CarText);
+    ctor public MessageTemplate.Builder(CharSequence);
+    method public androidx.car.app.model.MessageTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.MessageTemplate build();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(String);
+    method public androidx.car.app.model.MessageTemplate.Builder setDebugMessage(Throwable);
+    method public androidx.car.app.model.MessageTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.MessageTemplate.Builder setIcon(androidx.car.app.model.CarIcon);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.MessageTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.MessageTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Metadata {
+    method public androidx.car.app.model.Place? getPlace();
+    field public static final androidx.car.app.model.Metadata EMPTY_METADATA;
+  }
+
+  public static final class Metadata.Builder {
+    ctor public Metadata.Builder();
+    ctor public Metadata.Builder(androidx.car.app.model.Metadata);
+    method public androidx.car.app.model.Metadata build();
+    method public androidx.car.app.model.Metadata.Builder setPlace(androidx.car.app.model.Place);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnCheckedChangeDelegate {
+    method public void sendCheckedChange(boolean, androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnClickDelegate {
+    method public boolean isParkedOnly();
+    method public void sendClick(androidx.car.app.OnDoneCallback);
+  }
+
+  public interface OnClickListener {
+    method public void onClick();
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public interface OnContentRefreshDelegate {
+    method public void sendContentRefreshRequested(androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public interface OnContentRefreshListener {
+    method public void onContentRefreshRequested();
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnItemVisibilityChangedDelegate {
+    method public void sendItemVisibilityChanged(int, int, androidx.car.app.OnDoneCallback);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface OnSelectedDelegate {
+    method public void sendSelected(int, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Pane {
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.CarIcon? getImage();
+    method public java.util.List<androidx.car.app.model.Row!> getRows();
+    method public boolean isLoading();
+  }
+
+  public static final class Pane.Builder {
+    ctor public Pane.Builder();
+    method public androidx.car.app.model.Pane.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Pane.Builder addRow(androidx.car.app.model.Row);
+    method public androidx.car.app.model.Pane build();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.Pane.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Pane.Builder setLoading(boolean);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PaneTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.Pane getPane();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  public static final class PaneTemplate.Builder {
+    ctor public PaneTemplate.Builder(androidx.car.app.model.Pane);
+    method public androidx.car.app.model.PaneTemplate build();
+    method public androidx.car.app.model.PaneTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.PaneTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.PaneTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class ParkedOnlyOnClickListener implements androidx.car.app.model.OnClickListener {
+    method public static androidx.car.app.model.ParkedOnlyOnClickListener create(androidx.car.app.model.OnClickListener);
+    method public void onClick();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Place {
+    method public androidx.car.app.model.CarLocation getLocation();
+    method public androidx.car.app.model.PlaceMarker? getMarker();
+  }
+
+  public static final class Place.Builder {
+    ctor public Place.Builder(androidx.car.app.model.CarLocation);
+    ctor public Place.Builder(androidx.car.app.model.Place);
+    method public androidx.car.app.model.Place build();
+    method public androidx.car.app.model.Place.Builder setMarker(androidx.car.app.model.PlaceMarker);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PlaceListMapTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Place? getAnchor();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.OnContentRefreshDelegate? getOnContentRefreshDelegate();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isCurrentLocationEnabled();
+    method public boolean isLoading();
+  }
+
+  public static final class PlaceListMapTemplate.Builder {
+    ctor public PlaceListMapTemplate.Builder();
+    method public androidx.car.app.model.PlaceListMapTemplate build();
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setAnchor(androidx.car.app.model.Place);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setCurrentLocationEnabled(boolean);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setLoading(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.PlaceListMapTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.PlaceListMapTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PlaceMarker {
+    method public androidx.car.app.model.CarColor? getColor();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public int getIconType();
+    method public androidx.car.app.model.CarText? getLabel();
+    field public static final int TYPE_ICON = 0; // 0x0
+    field public static final int TYPE_IMAGE = 1; // 0x1
+  }
+
+  public static final class PlaceMarker.Builder {
+    ctor public PlaceMarker.Builder();
+    method public androidx.car.app.model.PlaceMarker build();
+    method public androidx.car.app.model.PlaceMarker.Builder setColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.PlaceMarker.Builder setIcon(androidx.car.app.model.CarIcon, int);
+    method public androidx.car.app.model.PlaceMarker.Builder setLabel(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Row implements androidx.car.app.model.Item {
+    method @androidx.car.app.annotations.RequiresCarApi(6) public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public androidx.car.app.model.Metadata? getMetadata();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public int getNumericDecoration();
+    method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
+    method public int getRowImageType();
+    method public java.util.List<androidx.car.app.model.CarText!> getTexts();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public androidx.car.app.model.Toggle? getToggle();
+    method public boolean isBrowsable();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
+    method public androidx.car.app.model.Row row();
+    method public CharSequence yourBoat();
+    field public static final int IMAGE_TYPE_ICON = 4; // 0x4
+    field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
+    field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
+    field public static final int NO_DECORATION = -1; // 0xffffffff
+  }
+
+  public static final class Row.Builder {
+    ctor public Row.Builder();
+    method @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Row.Builder addText(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Row.Builder addText(CharSequence);
+    method public androidx.car.app.model.Row build();
+    method public androidx.car.app.model.Row.Builder setBrowsable(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Row.Builder setEnabled(boolean);
+    method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon, int);
+    method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
+    method @IntRange(from=0) @androidx.car.app.annotations.RequiresCarApi(6) public androidx.car.app.model.Row.Builder setNumericDecoration(int);
+    method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
+    method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
+    method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
+    method public androidx.car.app.model.Row.Builder setToggle(androidx.car.app.model.Toggle);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface SearchCallbackDelegate {
+    method public void sendSearchSubmitted(String, androidx.car.app.OnDoneCallback);
+    method public void sendSearchTextChanged(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class SearchTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public String? getInitialSearchText();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method public androidx.car.app.model.SearchCallbackDelegate getSearchCallbackDelegate();
+    method public String? getSearchHint();
+    method public boolean isLoading();
+    method public boolean isShowKeyboardByDefault();
+  }
+
+  public static final class SearchTemplate.Builder {
+    ctor public SearchTemplate.Builder(androidx.car.app.model.SearchTemplate.SearchCallback);
+    method public androidx.car.app.model.SearchTemplate build();
+    method public androidx.car.app.model.SearchTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.SearchTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.SearchTemplate.Builder setInitialSearchText(String);
+    method public androidx.car.app.model.SearchTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.model.SearchTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.SearchTemplate.Builder setSearchHint(String);
+    method public androidx.car.app.model.SearchTemplate.Builder setShowKeyboardByDefault(boolean);
+  }
+
+  public static interface SearchTemplate.SearchCallback {
+    method public default void onSearchSubmitted(String);
+    method public default void onSearchTextChanged(String);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class SectionedItemList {
+    method public static androidx.car.app.model.SectionedItemList create(androidx.car.app.model.ItemList, CharSequence);
+    method public androidx.car.app.model.CarText getHeader();
+    method public androidx.car.app.model.ItemList getItemList();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public final class Tab implements androidx.car.app.model.Content {
+    method public String getContentId();
+    method public androidx.car.app.model.CarIcon getIcon();
+    method public androidx.car.app.model.CarText getTitle();
+  }
+
+  public static final class Tab.Builder {
+    ctor public Tab.Builder();
+    ctor public Tab.Builder(androidx.car.app.model.Tab);
+    method public androidx.car.app.model.Tab build();
+    method public androidx.car.app.model.Tab.Builder setContentId(String);
+    method public androidx.car.app.model.Tab.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.model.Tab.Builder setTitle(CharSequence);
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public interface TabCallbackDelegate {
+    method public void sendTabSelected(String, androidx.car.app.OnDoneCallback);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class TabContents implements androidx.car.app.model.Content {
+    method public String getContentId();
+    method public androidx.car.app.model.Template getTemplate();
+    field public static final String CONTENT_ID = "TAB_CONTENTS_CONTENT_ID";
+  }
+
+  public static final class TabContents.Builder {
+    ctor public TabContents.Builder(androidx.car.app.model.Template);
+    method public androidx.car.app.model.TabContents build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(6) public class TabTemplate implements androidx.car.app.model.Template {
+    method public String getActiveTabContentId();
+    method public androidx.car.app.model.Action getHeaderAction();
+    method public androidx.car.app.model.TabCallbackDelegate getTabCallbackDelegate();
+    method public androidx.car.app.model.TabContents getTabContents();
+    method public java.util.List<androidx.car.app.model.Tab!> getTabs();
+    method public boolean isLoading();
+  }
+
+  public static final class TabTemplate.Builder {
+    ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate);
+    ctor public TabTemplate.Builder(androidx.car.app.model.TabTemplate.TabCallback);
+    method public androidx.car.app.model.TabTemplate.Builder addTab(androidx.car.app.model.Tab);
+    method public androidx.car.app.model.TabTemplate build();
+    method public androidx.car.app.model.TabTemplate.Builder setActiveTabContentId(String);
+    method public androidx.car.app.model.TabTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.TabTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.TabTemplate.Builder setTabContents(androidx.car.app.model.TabContents);
+  }
+
+  public static interface TabTemplate.TabCallback {
+    method public default void onTabSelected(String);
+  }
+
+  @androidx.car.app.annotations.CarProtocol public interface Template {
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class TemplateInfo {
+    ctor public TemplateInfo(Class<? extends androidx.car.app.model.Template>, String);
+    method public Class<? extends androidx.car.app.model.Template> getTemplateClass();
+    method public String getTemplateId();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class TemplateWrapper {
+    method public static androidx.car.app.model.TemplateWrapper copyOf(androidx.car.app.model.TemplateWrapper);
+    method public int getCurrentTaskStep();
+    method public String getId();
+    method public androidx.car.app.model.Template getTemplate();
+    method public java.util.List<androidx.car.app.model.TemplateInfo!> getTemplateInfosForScreenStack();
+    method public boolean isRefresh();
+    method public void setCurrentTaskStep(int);
+    method public void setId(String);
+    method public void setRefresh(boolean);
+    method public void setTemplate(androidx.car.app.model.Template);
+    method public static androidx.car.app.model.TemplateWrapper wrap(androidx.car.app.model.Template);
+    method public static androidx.car.app.model.TemplateWrapper wrap(androidx.car.app.model.Template, String);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Toggle {
+    method public androidx.car.app.model.OnCheckedChangeDelegate getOnCheckedChangeDelegate();
+    method public boolean isChecked();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
+  }
+
+  public static final class Toggle.Builder {
+    ctor public Toggle.Builder(androidx.car.app.model.Toggle.OnCheckedChangeListener);
+    method public androidx.car.app.model.Toggle build();
+    method public androidx.car.app.model.Toggle.Builder setChecked(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Toggle.Builder setEnabled(boolean);
+  }
+
+  public static interface Toggle.OnCheckedChangeListener {
+    method public void onCheckedChange(boolean);
+  }
+
+}
+
+package androidx.car.app.model.signin {
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class InputSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    method public androidx.car.app.model.CarText? getDefaultValue();
+    method public androidx.car.app.model.CarText? getErrorMessage();
+    method public androidx.car.app.model.CarText? getHint();
+    method public androidx.car.app.model.InputCallbackDelegate getInputCallbackDelegate();
+    method public int getInputType();
+    method public int getKeyboardType();
+    method public boolean isShowKeyboardByDefault();
+    field public static final int INPUT_TYPE_DEFAULT = 1; // 0x1
+    field public static final int INPUT_TYPE_PASSWORD = 2; // 0x2
+    field public static final int KEYBOARD_DEFAULT = 1; // 0x1
+    field public static final int KEYBOARD_EMAIL = 2; // 0x2
+    field public static final int KEYBOARD_NUMBER = 4; // 0x4
+    field public static final int KEYBOARD_PHONE = 3; // 0x3
+  }
+
+  public static final class InputSignInMethod.Builder {
+    ctor public InputSignInMethod.Builder(androidx.car.app.model.InputCallback);
+    method public androidx.car.app.model.signin.InputSignInMethod build();
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setDefaultValue(String);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setErrorMessage(CharSequence);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setHint(CharSequence);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setInputType(int);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setKeyboardType(int);
+    method public androidx.car.app.model.signin.InputSignInMethod.Builder setShowKeyboardByDefault(boolean);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class PinSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    ctor public PinSignInMethod(CharSequence);
+    method public androidx.car.app.model.CarText getPinCode();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class ProviderSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    ctor public ProviderSignInMethod(androidx.car.app.model.Action);
+    method public androidx.car.app.model.Action getAction();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(4) public final class QRCodeSignInMethod implements androidx.car.app.model.signin.SignInTemplate.SignInMethod {
+    ctor public QRCodeSignInMethod(android.net.Uri);
+    method public android.net.Uri getUri();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.RequiresCarApi(2) public final class SignInTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public java.util.List<androidx.car.app.model.Action!> getActions();
+    method public androidx.car.app.model.CarText? getAdditionalText();
+    method public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.CarText? getInstructions();
+    method public androidx.car.app.model.signin.SignInTemplate.SignInMethod getSignInMethod();
+    method public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+  }
+
+  @androidx.car.app.annotations.RequiresCarApi(2) public static final class SignInTemplate.Builder {
+    ctor public SignInTemplate.Builder(androidx.car.app.model.signin.SignInTemplate.SignInMethod);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder addAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.signin.SignInTemplate build();
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setAdditionalText(CharSequence);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setInstructions(CharSequence);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.model.signin.SignInTemplate.Builder setTitle(CharSequence);
+  }
+
+  public static interface SignInTemplate.SignInMethod {
+  }
+
+}
+
+package androidx.car.app.navigation {
+
+  public class NavigationManager implements androidx.car.app.managers.Manager {
+    method @MainThread public void clearNavigationManagerCallback();
+    method @MainThread public void navigationEnded();
+    method @MainThread public void navigationStarted();
+    method @MainThread public void setNavigationManagerCallback(androidx.car.app.navigation.NavigationManagerCallback);
+    method @MainThread public void setNavigationManagerCallback(java.util.concurrent.Executor, androidx.car.app.navigation.NavigationManagerCallback);
+    method @MainThread public void updateTrip(androidx.car.app.navigation.model.Trip);
+  }
+
+  public interface NavigationManagerCallback {
+    method public default void onAutoDriveEnabled();
+    method public default void onStopNavigation();
+  }
+
+}
+
+package androidx.car.app.navigation.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Destination {
+    method public androidx.car.app.model.CarText? getAddress();
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public androidx.car.app.model.CarText? getName();
+  }
+
+  public static final class Destination.Builder {
+    ctor public Destination.Builder();
+    method public androidx.car.app.navigation.model.Destination build();
+    method public androidx.car.app.navigation.model.Destination.Builder setAddress(CharSequence);
+    method public androidx.car.app.navigation.model.Destination.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.Destination.Builder setName(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Lane {
+    method public java.util.List<androidx.car.app.navigation.model.LaneDirection!> getDirections();
+  }
+
+  public static final class Lane.Builder {
+    ctor public Lane.Builder();
+    method public androidx.car.app.navigation.model.Lane.Builder addDirection(androidx.car.app.navigation.model.LaneDirection);
+    method public androidx.car.app.navigation.model.Lane build();
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class LaneDirection {
+    method public static androidx.car.app.navigation.model.LaneDirection create(int, boolean);
+    method public int getShape();
+    method public boolean isRecommended();
+    field public static final int SHAPE_NORMAL_LEFT = 5; // 0x5
+    field public static final int SHAPE_NORMAL_RIGHT = 6; // 0x6
+    field public static final int SHAPE_SHARP_LEFT = 7; // 0x7
+    field public static final int SHAPE_SHARP_RIGHT = 8; // 0x8
+    field public static final int SHAPE_SLIGHT_LEFT = 3; // 0x3
+    field public static final int SHAPE_SLIGHT_RIGHT = 4; // 0x4
+    field public static final int SHAPE_STRAIGHT = 2; // 0x2
+    field public static final int SHAPE_UNKNOWN = 1; // 0x1
+    field public static final int SHAPE_U_TURN_LEFT = 9; // 0x9
+    field public static final int SHAPE_U_TURN_RIGHT = 10; // 0xa
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Maneuver {
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public int getRoundaboutExitAngle();
+    method public int getRoundaboutExitNumber();
+    method public int getType();
+    field public static final int TYPE_DEPART = 1; // 0x1
+    field public static final int TYPE_DESTINATION = 39; // 0x27
+    field public static final int TYPE_DESTINATION_LEFT = 41; // 0x29
+    field public static final int TYPE_DESTINATION_RIGHT = 42; // 0x2a
+    field public static final int TYPE_DESTINATION_STRAIGHT = 40; // 0x28
+    field public static final int TYPE_FERRY_BOAT = 37; // 0x25
+    field public static final int TYPE_FERRY_BOAT_LEFT = 47; // 0x2f
+    field public static final int TYPE_FERRY_BOAT_RIGHT = 48; // 0x30
+    field public static final int TYPE_FERRY_TRAIN = 38; // 0x26
+    field public static final int TYPE_FERRY_TRAIN_LEFT = 49; // 0x31
+    field public static final int TYPE_FERRY_TRAIN_RIGHT = 50; // 0x32
+    field public static final int TYPE_FORK_LEFT = 25; // 0x19
+    field public static final int TYPE_FORK_RIGHT = 26; // 0x1a
+    field public static final int TYPE_KEEP_LEFT = 3; // 0x3
+    field public static final int TYPE_KEEP_RIGHT = 4; // 0x4
+    field public static final int TYPE_MERGE_LEFT = 27; // 0x1b
+    field public static final int TYPE_MERGE_RIGHT = 28; // 0x1c
+    field public static final int TYPE_MERGE_SIDE_UNSPECIFIED = 29; // 0x1d
+    field public static final int TYPE_NAME_CHANGE = 2; // 0x2
+    field public static final int TYPE_OFF_RAMP_NORMAL_LEFT = 23; // 0x17
+    field public static final int TYPE_OFF_RAMP_NORMAL_RIGHT = 24; // 0x18
+    field public static final int TYPE_OFF_RAMP_SLIGHT_LEFT = 21; // 0x15
+    field public static final int TYPE_OFF_RAMP_SLIGHT_RIGHT = 22; // 0x16
+    field public static final int TYPE_ON_RAMP_NORMAL_LEFT = 15; // 0xf
+    field public static final int TYPE_ON_RAMP_NORMAL_RIGHT = 16; // 0x10
+    field public static final int TYPE_ON_RAMP_SHARP_LEFT = 17; // 0x11
+    field public static final int TYPE_ON_RAMP_SHARP_RIGHT = 18; // 0x12
+    field public static final int TYPE_ON_RAMP_SLIGHT_LEFT = 13; // 0xd
+    field public static final int TYPE_ON_RAMP_SLIGHT_RIGHT = 14; // 0xe
+    field public static final int TYPE_ON_RAMP_U_TURN_LEFT = 19; // 0x13
+    field public static final int TYPE_ON_RAMP_U_TURN_RIGHT = 20; // 0x14
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW = 34; // 0x22
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE = 35; // 0x23
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW = 32; // 0x20
+    field public static final int TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW_WITH_ANGLE = 33; // 0x21
+    field public static final int TYPE_ROUNDABOUT_ENTER_CCW = 45; // 0x2d
+    field public static final int TYPE_ROUNDABOUT_ENTER_CW = 43; // 0x2b
+    field public static final int TYPE_ROUNDABOUT_EXIT_CCW = 46; // 0x2e
+    field public static final int TYPE_ROUNDABOUT_EXIT_CW = 44; // 0x2c
+    field public static final int TYPE_STRAIGHT = 36; // 0x24
+    field public static final int TYPE_TURN_NORMAL_LEFT = 7; // 0x7
+    field public static final int TYPE_TURN_NORMAL_RIGHT = 8; // 0x8
+    field public static final int TYPE_TURN_SHARP_LEFT = 9; // 0x9
+    field public static final int TYPE_TURN_SHARP_RIGHT = 10; // 0xa
+    field public static final int TYPE_TURN_SLIGHT_LEFT = 5; // 0x5
+    field public static final int TYPE_TURN_SLIGHT_RIGHT = 6; // 0x6
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_U_TURN_LEFT = 11; // 0xb
+    field public static final int TYPE_U_TURN_RIGHT = 12; // 0xc
+  }
+
+  public static final class Maneuver.Builder {
+    ctor public Maneuver.Builder(int);
+    method public androidx.car.app.navigation.model.Maneuver build();
+    method public androidx.car.app.navigation.model.Maneuver.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.Maneuver.Builder setRoundaboutExitAngle(@IntRange(from=1, to=360) int);
+    method public androidx.car.app.navigation.model.Maneuver.Builder setRoundaboutExitNumber(@IntRange(from=1) int);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class MapController {
+    method public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+  }
+
+  public static final class MapController.Builder {
+    ctor public MapController.Builder();
+    method public androidx.car.app.navigation.model.MapController build();
+    method public androidx.car.app.navigation.model.MapController.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.MapController.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(5) public final class MapTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Header? getHeader();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method public androidx.car.app.navigation.model.MapController? getMapController();
+    method public androidx.car.app.model.Pane? getPane();
+  }
+
+  public static final class MapTemplate.Builder {
+    ctor public MapTemplate.Builder();
+    method public androidx.car.app.navigation.model.MapTemplate build();
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setHeader(androidx.car.app.model.Header);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setMapController(androidx.car.app.navigation.model.MapController);
+    method public androidx.car.app.navigation.model.MapTemplate.Builder setPane(androidx.car.app.model.Pane);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @androidx.car.app.annotations.RequiresCarApi(7) public final class MapWithContentTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.Template? getContentTemplate();
+    method public androidx.car.app.navigation.model.MapController? getMapController();
+    method public boolean isLoading();
+  }
+
+  public static final class MapWithContentTemplate.Builder {
+    ctor public MapWithContentTemplate.Builder();
+    method public androidx.car.app.navigation.model.MapWithContentTemplate build();
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setContentTemplate(androidx.car.app.model.Template);
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setLoading(boolean);
+    method public androidx.car.app.navigation.model.MapWithContentTemplate.Builder setMapController(androidx.car.app.navigation.model.MapController);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class MessageInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
+    method public androidx.car.app.model.CarIcon? getImage();
+    method public androidx.car.app.model.CarText? getText();
+    method public androidx.car.app.model.CarText? getTitle();
+  }
+
+  public static final class MessageInfo.Builder {
+    ctor public MessageInfo.Builder(androidx.car.app.model.CarText);
+    ctor public MessageInfo.Builder(CharSequence);
+    method public androidx.car.app.navigation.model.MessageInfo build();
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setText(androidx.car.app.model.CarText);
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setText(CharSequence);
+    method public androidx.car.app.navigation.model.MessageInfo.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class NavigationTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
+    method public androidx.car.app.navigation.model.TravelEstimate? getDestinationTravelEstimate();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo? getNavigationInfo();
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+    method @Deprecated @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.model.Toggle? getPanModeToggle();
+  }
+
+  public static final class NavigationTemplate.Builder {
+    ctor public NavigationTemplate.Builder();
+    method public androidx.car.app.navigation.model.NavigationTemplate build();
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setBackgroundColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setDestinationTravelEstimate(androidx.car.app.navigation.model.TravelEstimate);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.NavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.NavigationTemplate.Builder setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo);
+    method @androidx.car.app.annotations.RequiresCarApi(2) public androidx.car.app.navigation.model.NavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+  }
+
+  public static interface NavigationTemplate.NavigationInfo {
+  }
+
+  @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.RequiresCarApi(2) public interface PanModeDelegate {
+    method public void sendPanModeChanged(boolean, androidx.car.app.OnDoneCallback);
+  }
+
+  public interface PanModeListener {
+    method public void onPanModeChanged(boolean);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class PlaceListNavigationTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Header? getHeader();
+    method @Deprecated public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.model.OnContentRefreshDelegate? getOnContentRefreshDelegate();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+    method @Deprecated public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+  }
+
+  public static final class PlaceListNavigationTemplate.Builder {
+    ctor public PlaceListNavigationTemplate.Builder();
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate build();
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setHeader(androidx.car.app.model.Header);
+    method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setLoading(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+    method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+    method @Deprecated public androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class RoutePreviewNavigationTemplate implements androidx.car.app.model.Template {
+    method public androidx.car.app.model.ActionStrip? getActionStrip();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.Header? getHeader();
+    method @Deprecated public androidx.car.app.model.Action? getHeaderAction();
+    method public androidx.car.app.model.ItemList? getItemList();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.model.ActionStrip? getMapActionStrip();
+    method public androidx.car.app.model.Action? getNavigateAction();
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.PanModeDelegate? getPanModeDelegate();
+    method @Deprecated public androidx.car.app.model.CarText? getTitle();
+    method public boolean isLoading();
+  }
+
+  public static final class RoutePreviewNavigationTemplate.Builder {
+    ctor public RoutePreviewNavigationTemplate.Builder();
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate build();
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setHeader(androidx.car.app.model.Header);
+    method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setItemList(androidx.car.app.model.ItemList);
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setLoading(boolean);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setMapActionStrip(androidx.car.app.model.ActionStrip);
+    method public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setNavigateAction(androidx.car.app.model.Action);
+    method @androidx.car.app.annotations.RequiresCarApi(4) public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setPanModeListener(androidx.car.app.navigation.model.PanModeListener);
+    method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(androidx.car.app.model.CarText);
+    method @Deprecated public androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder setTitle(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class RoutingInfo implements androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo {
+    method public androidx.car.app.model.Distance? getCurrentDistance();
+    method public androidx.car.app.navigation.model.Step? getCurrentStep();
+    method public androidx.car.app.model.CarIcon? getJunctionImage();
+    method public androidx.car.app.navigation.model.Step? getNextStep();
+    method public boolean isLoading();
+  }
+
+  public static final class RoutingInfo.Builder {
+    ctor public RoutingInfo.Builder();
+    method public androidx.car.app.navigation.model.RoutingInfo build();
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setCurrentStep(androidx.car.app.navigation.model.Step, androidx.car.app.model.Distance);
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setJunctionImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setLoading(boolean);
+    method public androidx.car.app.navigation.model.RoutingInfo.Builder setNextStep(androidx.car.app.navigation.model.Step);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Step {
+    method public androidx.car.app.model.CarText? getCue();
+    method public java.util.List<androidx.car.app.navigation.model.Lane!> getLanes();
+    method public androidx.car.app.model.CarIcon? getLanesImage();
+    method public androidx.car.app.navigation.model.Maneuver? getManeuver();
+    method public androidx.car.app.model.CarText? getRoad();
+  }
+
+  public static final class Step.Builder {
+    ctor public Step.Builder();
+    ctor public Step.Builder(androidx.car.app.model.CarText);
+    ctor public Step.Builder(CharSequence);
+    method public androidx.car.app.navigation.model.Step.Builder addLane(androidx.car.app.navigation.model.Lane);
+    method public androidx.car.app.navigation.model.Step build();
+    method public androidx.car.app.navigation.model.Step.Builder setCue(CharSequence);
+    method public androidx.car.app.navigation.model.Step.Builder setLanesImage(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.navigation.model.Step.Builder setManeuver(androidx.car.app.navigation.model.Maneuver);
+    method public androidx.car.app.navigation.model.Step.Builder setRoad(CharSequence);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class TravelEstimate {
+    method public androidx.car.app.model.DateTimeWithZone? getArrivalTimeAtDestination();
+    method public androidx.car.app.model.Distance? getRemainingDistance();
+    method public androidx.car.app.model.CarColor? getRemainingDistanceColor();
+    method public androidx.car.app.model.CarColor? getRemainingTimeColor();
+    method public long getRemainingTimeSeconds();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.CarIcon? getTripIcon();
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.model.CarText? getTripText();
+    field public static final long REMAINING_TIME_UNKNOWN = -1L; // 0xffffffffffffffffL
+  }
+
+  public static final class TravelEstimate.Builder {
+    ctor public TravelEstimate.Builder(androidx.car.app.model.Distance, androidx.car.app.model.DateTimeWithZone);
+    ctor @RequiresApi(26) public TravelEstimate.Builder(androidx.car.app.model.Distance, java.time.ZonedDateTime);
+    method public androidx.car.app.navigation.model.TravelEstimate build();
+    method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingDistanceColor(androidx.car.app.model.CarColor);
+    method @RequiresApi(26) public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTime(java.time.Duration);
+    method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTimeColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.navigation.model.TravelEstimate.Builder setRemainingTimeSeconds(@IntRange(from=0xffffffff) long);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.TravelEstimate.Builder setTripIcon(androidx.car.app.model.CarIcon);
+    method @androidx.car.app.annotations.RequiresCarApi(5) public androidx.car.app.navigation.model.TravelEstimate.Builder setTripText(androidx.car.app.model.CarText);
+  }
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Trip {
+    method public androidx.car.app.model.CarText? getCurrentRoad();
+    method public java.util.List<androidx.car.app.navigation.model.TravelEstimate!> getDestinationTravelEstimates();
+    method public java.util.List<androidx.car.app.navigation.model.Destination!> getDestinations();
+    method public java.util.List<androidx.car.app.navigation.model.TravelEstimate!> getStepTravelEstimates();
+    method public java.util.List<androidx.car.app.navigation.model.Step!> getSteps();
+    method public boolean isLoading();
+  }
+
+  public static final class Trip.Builder {
+    ctor public Trip.Builder();
+    method public androidx.car.app.navigation.model.Trip.Builder addDestination(androidx.car.app.navigation.model.Destination, androidx.car.app.navigation.model.TravelEstimate);
+    method public androidx.car.app.navigation.model.Trip.Builder addStep(androidx.car.app.navigation.model.Step, androidx.car.app.navigation.model.TravelEstimate);
+    method public androidx.car.app.navigation.model.Trip build();
+    method public androidx.car.app.navigation.model.Trip.Builder setCurrentRoad(CharSequence);
+    method public androidx.car.app.navigation.model.Trip.Builder setLoading(boolean);
+  }
+
+}
+
+package androidx.car.app.notification {
+
+  public final class CarAppExtender implements androidx.core.app.NotificationCompat.Extender {
+    ctor public CarAppExtender(android.app.Notification);
+    method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
+    method public java.util.List<android.app.Notification.Action!> getActions();
+    method public String? getChannelId();
+    method public androidx.car.app.model.CarColor? getColor();
+    method public android.app.PendingIntent? getContentIntent();
+    method public CharSequence? getContentText();
+    method public CharSequence? getContentTitle();
+    method public android.app.PendingIntent? getDeleteIntent();
+    method public int getImportance();
+    method public android.graphics.Bitmap? getLargeIcon();
+    method @DrawableRes public int getSmallIcon();
+    method public static boolean isExtended(android.app.Notification);
+  }
+
+  public static final class CarAppExtender.Builder {
+    ctor public CarAppExtender.Builder();
+    method public androidx.car.app.notification.CarAppExtender.Builder addAction(@DrawableRes int, CharSequence, android.app.PendingIntent);
+    method public androidx.car.app.notification.CarAppExtender build();
+    method public androidx.car.app.notification.CarAppExtender.Builder setChannelId(String);
+    method public androidx.car.app.notification.CarAppExtender.Builder setColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.notification.CarAppExtender.Builder setContentIntent(android.app.PendingIntent);
+    method public androidx.car.app.notification.CarAppExtender.Builder setContentText(CharSequence);
+    method public androidx.car.app.notification.CarAppExtender.Builder setContentTitle(CharSequence);
+    method public androidx.car.app.notification.CarAppExtender.Builder setDeleteIntent(android.app.PendingIntent);
+    method public androidx.car.app.notification.CarAppExtender.Builder setImportance(int);
+    method public androidx.car.app.notification.CarAppExtender.Builder setLargeIcon(android.graphics.Bitmap);
+    method public androidx.car.app.notification.CarAppExtender.Builder setSmallIcon(int);
+  }
+
+  public final class CarNotificationManager {
+    method public boolean areNotificationsEnabled();
+    method public void cancel(int);
+    method public void cancel(String?, int);
+    method public void cancelAll();
+    method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
+    method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
+    method public void createNotificationChannelGroups(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
+    method public void createNotificationChannels(java.util.List<androidx.core.app.NotificationChannelCompat!>);
+    method public void deleteNotificationChannel(String);
+    method public void deleteNotificationChannelGroup(String);
+    method public void deleteUnlistedNotificationChannels(java.util.Collection<java.lang.String!>);
+    method public static androidx.car.app.notification.CarNotificationManager from(android.content.Context);
+    method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
+    method public int getImportance();
+    method public androidx.core.app.NotificationChannelCompat? getNotificationChannel(String);
+    method public androidx.core.app.NotificationChannelCompat? getNotificationChannel(String, String);
+    method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroup(String);
+    method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroups();
+    method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannels();
+    method public void notify(int, androidx.core.app.NotificationCompat.Builder);
+    method public void notify(String?, int, androidx.core.app.NotificationCompat.Builder);
+  }
+
+  public final class CarPendingIntent {
+    method public static android.app.PendingIntent getCarApp(android.content.Context, int, android.content.Intent, int);
+  }
+
+}
+
+package androidx.car.app.serialization {
+
+  public final class Bundleable implements android.os.Parcelable {
+    method public static androidx.car.app.serialization.Bundleable create(Object) throws androidx.car.app.serialization.BundlerException;
+    method public int describeContents();
+    method public Object get() throws androidx.car.app.serialization.BundlerException;
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.car.app.serialization.Bundleable!> CREATOR;
+  }
+
+  public class BundlerException extends java.lang.Exception {
+    ctor public BundlerException(String?);
+    ctor public BundlerException(String?, Throwable);
+  }
+
+}
+
+package androidx.car.app.suggestion {
+
+  @androidx.car.app.annotations.RequiresCarApi(5) public class SuggestionManager implements androidx.car.app.managers.Manager {
+    method @MainThread public void updateSuggestions(java.util.List<androidx.car.app.suggestion.model.Suggestion!>);
+  }
+
+}
+
+package androidx.car.app.suggestion.model {
+
+  @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class Suggestion {
+    method public android.app.PendingIntent? getAction();
+    method public androidx.car.app.model.CarIcon? getIcon();
+    method public String getIdentifier();
+    method public androidx.car.app.model.CarText? getSubtitle();
+    method public androidx.car.app.model.CarText getTitle();
+  }
+
+  public static final class Suggestion.Builder {
+    ctor public Suggestion.Builder();
+    method public androidx.car.app.suggestion.model.Suggestion build();
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setAction(android.app.PendingIntent);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setIcon(androidx.car.app.model.CarIcon);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setIdentifier(String);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setSubtitle(CharSequence);
+    method public androidx.car.app.suggestion.model.Suggestion.Builder setTitle(CharSequence);
+  }
+
+}
+
+package androidx.car.app.validation {
+
+  public final class HostValidator {
+    method public java.util.Map<java.lang.String!,java.util.List<java.lang.String!>!> getAllowedHosts();
+    method public boolean isValidHost(androidx.car.app.HostInfo);
+    field public static final androidx.car.app.validation.HostValidator ALLOW_ALL_HOSTS_VALIDATOR;
+    field public static final String TEMPLATE_RENDERER_PERMISSION = "android.car.permission.TEMPLATE_RENDERER";
+  }
+
+  public static final class HostValidator.Builder {
+    ctor public HostValidator.Builder(android.content.Context);
+    method public androidx.car.app.validation.HostValidator.Builder addAllowedHost(String, String);
+    method public androidx.car.app.validation.HostValidator.Builder addAllowedHosts(@ArrayRes int);
+    method public androidx.car.app.validation.HostValidator build();
+  }
+
+}
+
+package androidx.car.app.versioning {
+
+  public final class CarAppApiLevels {
+    method public static int getLatest();
+    method public static int getOldest();
+    field public static final int LEVEL_1 = 1; // 0x1
+    field public static final int LEVEL_2 = 2; // 0x2
+    field public static final int LEVEL_3 = 3; // 0x3
+    field public static final int LEVEL_4 = 4; // 0x4
+    field public static final int LEVEL_5 = 5; // 0x5
+    field public static final int LEVEL_6 = 6; // 0x6
+    field public static final int LEVEL_7 = 7; // 0x7
+  }
+
+}
+
diff --git a/car/app/app/api/restricted_current.ignore b/car/app/app/api/restricted_current.ignore
deleted file mode 100644
index 48a4393..0000000
--- a/car/app/app/api/restricted_current.ignore
+++ /dev/null
@@ -1,2387 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.car.app.AppInfo:
-    Removed class androidx.car.app.AppInfo from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#AppInfo(int, int, String):
-    Removed constructor androidx.car.app.AppInfo(int,int,String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#AppInfo(int, int, String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.AppInfo(int arg1, int arg2, String arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#AppInfo(int, int, String) parameter #1:
-    Removed parameter arg2 in androidx.car.app.AppInfo(int arg1, int arg2, String arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#AppInfo(int, int, String) parameter #2:
-    Removed parameter arg3 in androidx.car.app.AppInfo(int arg1, int arg2, String arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#MIN_API_LEVEL_METADATA_KEY:
-    Removed field androidx.car.app.AppInfo.MIN_API_LEVEL_METADATA_KEY from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#getLatestCarAppApiLevel():
-    Removed method androidx.car.app.AppInfo.getLatestCarAppApiLevel() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#getLibraryDisplayVersion():
-    Removed method androidx.car.app.AppInfo.getLibraryDisplayVersion() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.AppInfo#getMinCarAppApiLevel():
-    Removed method androidx.car.app.AppInfo.getMinCarAppApiLevel() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse:
-    Removed class androidx.car.app.FailureResponse from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#BUNDLER_EXCEPTION:
-    Removed field androidx.car.app.FailureResponse.BUNDLER_EXCEPTION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#FailureResponse(Throwable):
-    Removed constructor androidx.car.app.FailureResponse(Throwable) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#FailureResponse(Throwable) parameter #0:
-    Removed parameter arg1 in androidx.car.app.FailureResponse(Throwable arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#ILLEGAL_STATE_EXCEPTION:
-    Removed field androidx.car.app.FailureResponse.ILLEGAL_STATE_EXCEPTION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#INVALID_PARAMETER_EXCEPTION:
-    Removed field androidx.car.app.FailureResponse.INVALID_PARAMETER_EXCEPTION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#REMOTE_EXCEPTION:
-    Removed field androidx.car.app.FailureResponse.REMOTE_EXCEPTION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#RUNTIME_EXCEPTION:
-    Removed field androidx.car.app.FailureResponse.RUNTIME_EXCEPTION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#SECURITY_EXCEPTION:
-    Removed field androidx.car.app.FailureResponse.SECURITY_EXCEPTION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#UNKNOWN_ERROR:
-    Removed field androidx.car.app.FailureResponse.UNKNOWN_ERROR from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#getErrorType():
-    Removed method androidx.car.app.FailureResponse.getErrorType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.FailureResponse#getStackTrace():
-    Removed method androidx.car.app.FailureResponse.getStackTrace() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.HandshakeInfo:
-    Removed class androidx.car.app.HandshakeInfo from compatibility checked API surface
-BecameUnchecked: androidx.car.app.HandshakeInfo#HandshakeInfo(String, int):
-    Removed constructor androidx.car.app.HandshakeInfo(String,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.HandshakeInfo#HandshakeInfo(String, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.HandshakeInfo(String arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.HandshakeInfo#HandshakeInfo(String, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.HandshakeInfo(String arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.HandshakeInfo#getHostCarAppApiLevel():
-    Removed method androidx.car.app.HandshakeInfo.getHostCarAppApiLevel() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.HandshakeInfo#getHostPackageName():
-    Removed method androidx.car.app.HandshakeInfo.getHostPackageName() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo:
-    Removed class androidx.car.app.SessionInfo from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#DEFAULT_SESSION_INFO:
-    Removed field androidx.car.app.SessionInfo.DEFAULT_SESSION_INFO from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#DISPLAY_TYPE_CLUSTER:
-    Removed field androidx.car.app.SessionInfo.DISPLAY_TYPE_CLUSTER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#DISPLAY_TYPE_MAIN:
-    Removed field androidx.car.app.SessionInfo.DISPLAY_TYPE_MAIN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#SessionInfo(int, String):
-    Removed constructor androidx.car.app.SessionInfo(int,String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#SessionInfo(int, String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.SessionInfo(int arg1, String arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#SessionInfo(int, String) parameter #1:
-    Removed parameter arg2 in androidx.car.app.SessionInfo(int arg1, String arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#getDisplayType():
-    Removed method androidx.car.app.SessionInfo.getDisplayType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#getSessionId():
-    Removed method androidx.car.app.SessionInfo.getSessionId() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#getSupportedTemplates(int):
-    Removed method androidx.car.app.SessionInfo.getSupportedTemplates(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SessionInfo#getSupportedTemplates(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.SessionInfo.getSupportedTemplates(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer:
-    Removed class androidx.car.app.SurfaceContainer from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#SurfaceContainer(android.view.Surface, int, int, int):
-    Removed constructor androidx.car.app.SurfaceContainer(android.view.Surface,int,int,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#SurfaceContainer(android.view.Surface, int, int, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.SurfaceContainer(android.view.Surface arg1, int arg2, int arg3, int arg4) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#SurfaceContainer(android.view.Surface, int, int, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.SurfaceContainer(android.view.Surface arg1, int arg2, int arg3, int arg4) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#SurfaceContainer(android.view.Surface, int, int, int) parameter #2:
-    Removed parameter arg3 in androidx.car.app.SurfaceContainer(android.view.Surface arg1, int arg2, int arg3, int arg4) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#SurfaceContainer(android.view.Surface, int, int, int) parameter #3:
-    Removed parameter arg4 in androidx.car.app.SurfaceContainer(android.view.Surface arg1, int arg2, int arg3, int arg4) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#getDpi():
-    Removed method androidx.car.app.SurfaceContainer.getDpi() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#getHeight():
-    Removed method androidx.car.app.SurfaceContainer.getHeight() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#getSurface():
-    Removed method androidx.car.app.SurfaceContainer.getSurface() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.SurfaceContainer#getWidth():
-    Removed method androidx.car.app.SurfaceContainer.getWidth() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue:
-    Removed class androidx.car.app.hardware.common.CarValue from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#CarValue(T, long, int):
-    Removed constructor androidx.car.app.hardware.common.CarValue(T,long,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#CarValue(T, long, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.common.CarValue(T arg1, long arg2, int arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#CarValue(T, long, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.hardware.common.CarValue(T arg1, long arg2, int arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#CarValue(T, long, int) parameter #2:
-    Removed parameter arg3 in androidx.car.app.hardware.common.CarValue(T arg1, long arg2, int arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#STATUS_SUCCESS:
-    Removed field androidx.car.app.hardware.common.CarValue.STATUS_SUCCESS from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#STATUS_UNAVAILABLE:
-    Removed field androidx.car.app.hardware.common.CarValue.STATUS_UNAVAILABLE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#STATUS_UNIMPLEMENTED:
-    Removed field androidx.car.app.hardware.common.CarValue.STATUS_UNIMPLEMENTED from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#STATUS_UNKNOWN:
-    Removed field androidx.car.app.hardware.common.CarValue.STATUS_UNKNOWN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#getStatus():
-    Removed method androidx.car.app.hardware.common.CarValue.getStatus() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#getTimestampMillis():
-    Removed method androidx.car.app.hardware.common.CarValue.getTimestampMillis() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.common.CarValue#getValue():
-    Removed method androidx.car.app.hardware.common.CarValue.getValue() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Accelerometer:
-    Removed class androidx.car.app.hardware.info.Accelerometer from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Accelerometer#Accelerometer(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>):
-    Removed constructor androidx.car.app.hardware.info.Accelerometer(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Accelerometer#Accelerometer(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Accelerometer(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Accelerometer#getForces():
-    Removed method androidx.car.app.hardware.info.Accelerometer.getForces() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.CarHardwareLocation:
-    Removed class androidx.car.app.hardware.info.CarHardwareLocation from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.CarHardwareLocation#CarHardwareLocation(androidx.car.app.hardware.common.CarValue<android.location.Location>):
-    Removed constructor androidx.car.app.hardware.info.CarHardwareLocation(androidx.car.app.hardware.common.CarValue<android.location.Location>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.CarHardwareLocation#CarHardwareLocation(androidx.car.app.hardware.common.CarValue<android.location.Location>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.CarHardwareLocation(androidx.car.app.hardware.common.CarValue<android.location.Location> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.CarHardwareLocation#getLocation():
-    Removed method androidx.car.app.hardware.info.CarHardwareLocation.getLocation() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Compass:
-    Removed class androidx.car.app.hardware.info.Compass from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Compass#Compass(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>):
-    Removed constructor androidx.car.app.hardware.info.Compass(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Compass#Compass(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Compass(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Compass#getOrientations():
-    Removed method androidx.car.app.hardware.info.Compass.getOrientations() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel:
-    Removed class androidx.car.app.hardware.info.EnergyLevel from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel#getBatteryPercent():
-    Removed method androidx.car.app.hardware.info.EnergyLevel.getBatteryPercent() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel#getDistanceDisplayUnit():
-    Removed method androidx.car.app.hardware.info.EnergyLevel.getDistanceDisplayUnit() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel#getEnergyIsLow():
-    Removed method androidx.car.app.hardware.info.EnergyLevel.getEnergyIsLow() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel#getFuelPercent():
-    Removed method androidx.car.app.hardware.info.EnergyLevel.getFuelPercent() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel#getRangeRemainingMeters():
-    Removed method androidx.car.app.hardware.info.EnergyLevel.getRangeRemainingMeters() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder:
-    Removed class androidx.car.app.hardware.info.EnergyLevel.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#Builder():
-    Removed constructor androidx.car.app.hardware.info.EnergyLevel.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#build():
-    Removed method androidx.car.app.hardware.info.EnergyLevel.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setBatteryPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float>):
-    Removed method androidx.car.app.hardware.info.EnergyLevel.Builder.setBatteryPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setBatteryPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.EnergyLevel.Builder.setBatteryPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>):
-    Removed method androidx.car.app.hardware.info.EnergyLevel.Builder.setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.EnergyLevel.Builder.setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean>):
-    Removed method androidx.car.app.hardware.info.EnergyLevel.Builder.setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.EnergyLevel.Builder.setEnergyIsLow(androidx.car.app.hardware.common.CarValue<java.lang.Boolean> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float>):
-    Removed method androidx.car.app.hardware.info.EnergyLevel.Builder.setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.EnergyLevel.Builder.setFuelPercent(androidx.car.app.hardware.common.CarValue<java.lang.Float> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float>):
-    Removed method androidx.car.app.hardware.info.EnergyLevel.Builder.setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyLevel.Builder#setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.EnergyLevel.Builder.setRangeRemainingMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile:
-    Removed class androidx.car.app.hardware.info.EnergyProfile from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_CHADEMO:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_CHADEMO from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_COMBO_1:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_COMBO_1 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_COMBO_2:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_COMBO_2 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_GBT:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_GBT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_GBT_DC:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_GBT_DC from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_J1772:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_J1772 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_MENNEKES:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_MENNEKES from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_OTHER:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_OTHER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_SCAME:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_SCAME from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_TESLA_HPWC:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_TESLA_HPWC from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_TESLA_ROADSTER:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_TESLA_ROADSTER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_TESLA_SUPERCHARGER:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_TESLA_SUPERCHARGER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#EVCONNECTOR_TYPE_UNKNOWN:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_UNKNOWN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_BIODIESEL:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_BIODIESEL from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_CNG:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_CNG from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_DIESEL_1:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_DIESEL_1 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_DIESEL_2:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_DIESEL_2 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_E85:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_E85 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_ELECTRIC:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_ELECTRIC from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_HYDROGEN:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_HYDROGEN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_LEADED:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_LEADED from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_LNG:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_LNG from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_LPG:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_LPG from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_OTHER:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_OTHER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_UNKNOWN:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_UNKNOWN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#FUEL_TYPE_UNLEADED:
-    Removed field androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_UNLEADED from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#getEvConnectorTypes():
-    Removed method androidx.car.app.hardware.info.EnergyProfile.getEvConnectorTypes() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile#getFuelTypes():
-    Removed method androidx.car.app.hardware.info.EnergyProfile.getFuelTypes() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile.Builder:
-    Removed class androidx.car.app.hardware.info.EnergyProfile.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile.Builder#Builder():
-    Removed constructor androidx.car.app.hardware.info.EnergyProfile.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile.Builder#build():
-    Removed method androidx.car.app.hardware.info.EnergyProfile.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile.Builder#setEvConnectorTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>>):
-    Removed method androidx.car.app.hardware.info.EnergyProfile.Builder.setEvConnectorTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile.Builder#setEvConnectorTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.EnergyProfile.Builder.setEvConnectorTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile.Builder#setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>>):
-    Removed method androidx.car.app.hardware.info.EnergyProfile.Builder.setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.EnergyProfile.Builder#setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.EnergyProfile.Builder.setFuelTypes(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Integer>> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Gyroscope:
-    Removed class androidx.car.app.hardware.info.Gyroscope from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Gyroscope#Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>):
-    Removed constructor androidx.car.app.hardware.info.Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Gyroscope#Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Gyroscope(androidx.car.app.hardware.common.CarValue<java.util.List<java.lang.Float>> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Gyroscope#getRotations():
-    Removed method androidx.car.app.hardware.info.Gyroscope.getRotations() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage:
-    Removed class androidx.car.app.hardware.info.Mileage from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage#getDistanceDisplayUnit():
-    Removed method androidx.car.app.hardware.info.Mileage.getDistanceDisplayUnit() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage#getOdometerMeters():
-    Removed method androidx.car.app.hardware.info.Mileage.getOdometerMeters() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage.Builder:
-    Removed class androidx.car.app.hardware.info.Mileage.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage.Builder#Builder():
-    Removed constructor androidx.car.app.hardware.info.Mileage.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage.Builder#build():
-    Removed method androidx.car.app.hardware.info.Mileage.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage.Builder#setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>):
-    Removed method androidx.car.app.hardware.info.Mileage.Builder.setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage.Builder#setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Mileage.Builder.setDistanceDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage.Builder#setOdometerMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float>):
-    Removed method androidx.car.app.hardware.info.Mileage.Builder.setOdometerMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Mileage.Builder#setOdometerMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Mileage.Builder.setOdometerMeters(androidx.car.app.hardware.common.CarValue<java.lang.Float> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model:
-    Removed class androidx.car.app.hardware.info.Model from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model#getManufacturer():
-    Removed method androidx.car.app.hardware.info.Model.getManufacturer() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model#getName():
-    Removed method androidx.car.app.hardware.info.Model.getName() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model#getYear():
-    Removed method androidx.car.app.hardware.info.Model.getYear() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder:
-    Removed class androidx.car.app.hardware.info.Model.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#Builder():
-    Removed constructor androidx.car.app.hardware.info.Model.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#build():
-    Removed method androidx.car.app.hardware.info.Model.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#setManufacturer(androidx.car.app.hardware.common.CarValue<java.lang.String>):
-    Removed method androidx.car.app.hardware.info.Model.Builder.setManufacturer(androidx.car.app.hardware.common.CarValue<java.lang.String>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#setManufacturer(androidx.car.app.hardware.common.CarValue<java.lang.String>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Model.Builder.setManufacturer(androidx.car.app.hardware.common.CarValue<java.lang.String> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#setName(androidx.car.app.hardware.common.CarValue<java.lang.String>):
-    Removed method androidx.car.app.hardware.info.Model.Builder.setName(androidx.car.app.hardware.common.CarValue<java.lang.String>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#setName(androidx.car.app.hardware.common.CarValue<java.lang.String>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Model.Builder.setName(androidx.car.app.hardware.common.CarValue<java.lang.String> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#setYear(androidx.car.app.hardware.common.CarValue<java.lang.Integer>):
-    Removed method androidx.car.app.hardware.info.Model.Builder.setYear(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Model.Builder#setYear(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Model.Builder.setYear(androidx.car.app.hardware.common.CarValue<java.lang.Integer> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed:
-    Removed class androidx.car.app.hardware.info.Speed from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed#getDisplaySpeedMetersPerSecond():
-    Removed method androidx.car.app.hardware.info.Speed.getDisplaySpeedMetersPerSecond() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed#getRawSpeedMetersPerSecond():
-    Removed method androidx.car.app.hardware.info.Speed.getRawSpeedMetersPerSecond() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed#getSpeedDisplayUnit():
-    Removed method androidx.car.app.hardware.info.Speed.getSpeedDisplayUnit() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder:
-    Removed class androidx.car.app.hardware.info.Speed.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#Builder():
-    Removed constructor androidx.car.app.hardware.info.Speed.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#build():
-    Removed method androidx.car.app.hardware.info.Speed.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#setDisplaySpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float>):
-    Removed method androidx.car.app.hardware.info.Speed.Builder.setDisplaySpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#setDisplaySpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Speed.Builder.setDisplaySpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#setRawSpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float>):
-    Removed method androidx.car.app.hardware.info.Speed.Builder.setRawSpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#setRawSpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Speed.Builder.setRawSpeedMetersPerSecond(androidx.car.app.hardware.common.CarValue<java.lang.Float> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#setSpeedDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>):
-    Removed method androidx.car.app.hardware.info.Speed.Builder.setSpeedDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.Speed.Builder#setSpeedDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.Speed.Builder.setSpeedDisplayUnit(androidx.car.app.hardware.common.CarValue<java.lang.Integer> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard:
-    Removed class androidx.car.app.hardware.info.TollCard from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard#TOLLCARD_STATE_INVALID:
-    Removed field androidx.car.app.hardware.info.TollCard.TOLLCARD_STATE_INVALID from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard#TOLLCARD_STATE_NOT_INSERTED:
-    Removed field androidx.car.app.hardware.info.TollCard.TOLLCARD_STATE_NOT_INSERTED from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard#TOLLCARD_STATE_UNKNOWN:
-    Removed field androidx.car.app.hardware.info.TollCard.TOLLCARD_STATE_UNKNOWN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard#TOLLCARD_STATE_VALID:
-    Removed field androidx.car.app.hardware.info.TollCard.TOLLCARD_STATE_VALID from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard#getCardState():
-    Removed method androidx.car.app.hardware.info.TollCard.getCardState() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard.Builder:
-    Removed class androidx.car.app.hardware.info.TollCard.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard.Builder#Builder():
-    Removed constructor androidx.car.app.hardware.info.TollCard.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard.Builder#build():
-    Removed method androidx.car.app.hardware.info.TollCard.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard.Builder#setCardState(androidx.car.app.hardware.common.CarValue<java.lang.Integer>):
-    Removed method androidx.car.app.hardware.info.TollCard.Builder.setCardState(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.hardware.info.TollCard.Builder#setCardState(androidx.car.app.hardware.common.CarValue<java.lang.Integer>) parameter #0:
-    Removed parameter arg1 in androidx.car.app.hardware.info.TollCard.Builder.setCardState(androidx.car.app.hardware.common.CarValue<java.lang.Integer> arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.CarAudioCallbackDelegate:
-    Removed class androidx.car.app.media.CarAudioCallbackDelegate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.CarAudioCallbackDelegate#onStopRecording():
-    Removed method androidx.car.app.media.CarAudioCallbackDelegate.onStopRecording() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneRequest:
-    Removed class androidx.car.app.media.OpenMicrophoneRequest from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneRequest#getCarAudioCallbackDelegate():
-    Removed method androidx.car.app.media.OpenMicrophoneRequest.getCarAudioCallbackDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneRequest.Builder:
-    Removed class androidx.car.app.media.OpenMicrophoneRequest.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneRequest.Builder#Builder(androidx.car.app.media.CarAudioCallback):
-    Removed constructor androidx.car.app.media.OpenMicrophoneRequest.Builder(androidx.car.app.media.CarAudioCallback) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneRequest.Builder#Builder(androidx.car.app.media.CarAudioCallback) parameter #0:
-    Removed parameter arg1 in androidx.car.app.media.OpenMicrophoneRequest.Builder(androidx.car.app.media.CarAudioCallback arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneRequest.Builder#build():
-    Removed method androidx.car.app.media.OpenMicrophoneRequest.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse:
-    Removed class androidx.car.app.media.OpenMicrophoneResponse from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse#getCarAudioCallback():
-    Removed method androidx.car.app.media.OpenMicrophoneResponse.getCarAudioCallback() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse#getCarMicrophoneInputStream():
-    Removed method androidx.car.app.media.OpenMicrophoneResponse.getCarMicrophoneInputStream() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse.Builder:
-    Removed class androidx.car.app.media.OpenMicrophoneResponse.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse.Builder#Builder(androidx.car.app.media.CarAudioCallback):
-    Removed constructor androidx.car.app.media.OpenMicrophoneResponse.Builder(androidx.car.app.media.CarAudioCallback) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse.Builder#Builder(androidx.car.app.media.CarAudioCallback) parameter #0:
-    Removed parameter arg1 in androidx.car.app.media.OpenMicrophoneResponse.Builder(androidx.car.app.media.CarAudioCallback arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse.Builder#build():
-    Removed method androidx.car.app.media.OpenMicrophoneResponse.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse.Builder#setCarMicrophoneDescriptor(android.os.ParcelFileDescriptor):
-    Removed method androidx.car.app.media.OpenMicrophoneResponse.Builder.setCarMicrophoneDescriptor(android.os.ParcelFileDescriptor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.media.OpenMicrophoneResponse.Builder#setCarMicrophoneDescriptor(android.os.ParcelFileDescriptor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.media.OpenMicrophoneResponse.Builder.setCarMicrophoneDescriptor(android.os.ParcelFileDescriptor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action:
-    Removed class androidx.car.app.model.Action from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#APP_ICON:
-    Removed field androidx.car.app.model.Action.APP_ICON from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#BACK:
-    Removed field androidx.car.app.model.Action.BACK from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#FLAG_DEFAULT:
-    Removed field androidx.car.app.model.Action.FLAG_DEFAULT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#FLAG_IS_PERSISTENT:
-    Removed field androidx.car.app.model.Action.FLAG_IS_PERSISTENT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#FLAG_PRIMARY:
-    Removed field androidx.car.app.model.Action.FLAG_PRIMARY from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#PAN:
-    Removed field androidx.car.app.model.Action.PAN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#TYPE_APP_ICON:
-    Removed field androidx.car.app.model.Action.TYPE_APP_ICON from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#TYPE_BACK:
-    Removed field androidx.car.app.model.Action.TYPE_BACK from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#TYPE_CUSTOM:
-    Removed field androidx.car.app.model.Action.TYPE_CUSTOM from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#TYPE_PAN:
-    Removed field androidx.car.app.model.Action.TYPE_PAN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#getBackgroundColor():
-    Removed method androidx.car.app.model.Action.getBackgroundColor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#getFlags():
-    Removed method androidx.car.app.model.Action.getFlags() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#getIcon():
-    Removed method androidx.car.app.model.Action.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#getOnClickDelegate():
-    Removed method androidx.car.app.model.Action.getOnClickDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#getTitle():
-    Removed method androidx.car.app.model.Action.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#getType():
-    Removed method androidx.car.app.model.Action.getType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#isEnabled():
-    Removed method androidx.car.app.model.Action.isEnabled() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#isStandard():
-    Removed method androidx.car.app.model.Action.isStandard() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#typeToString(int):
-    Removed method androidx.car.app.model.Action.typeToString(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action#typeToString(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.typeToString(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder:
-    Removed class androidx.car.app.model.Action.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#Builder():
-    Removed constructor androidx.car.app.model.Action.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#Builder(androidx.car.app.model.Action):
-    Removed constructor androidx.car.app.model.Action.Builder(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#Builder(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#build():
-    Removed method androidx.car.app.model.Action.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setBackgroundColor(androidx.car.app.model.CarColor):
-    Removed method androidx.car.app.model.Action.Builder.setBackgroundColor(androidx.car.app.model.CarColor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setBackgroundColor(androidx.car.app.model.CarColor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder.setBackgroundColor(androidx.car.app.model.CarColor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setEnabled(boolean):
-    Removed method androidx.car.app.model.Action.Builder.setEnabled(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setEnabled(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder.setEnabled(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setFlags(int):
-    Removed method androidx.car.app.model.Action.Builder.setFlags(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setFlags(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder.setFlags(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setIcon(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.model.Action.Builder.setIcon(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setIcon(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder.setIcon(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setOnClickListener(androidx.car.app.model.OnClickListener):
-    Removed method androidx.car.app.model.Action.Builder.setOnClickListener(androidx.car.app.model.OnClickListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setOnClickListener(androidx.car.app.model.OnClickListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder.setOnClickListener(androidx.car.app.model.OnClickListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.Action.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setTitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.Action.Builder.setTitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Action.Builder#setTitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Action.Builder.setTitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip:
-    Removed class androidx.car.app.model.ActionStrip from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip#getActions():
-    Removed method androidx.car.app.model.ActionStrip.getActions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip#getFirstActionOfType(int):
-    Removed method androidx.car.app.model.ActionStrip.getFirstActionOfType(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip#getFirstActionOfType(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ActionStrip.getFirstActionOfType(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip.Builder:
-    Removed class androidx.car.app.model.ActionStrip.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip.Builder#Builder():
-    Removed constructor androidx.car.app.model.ActionStrip.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip.Builder#addAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.ActionStrip.Builder.addAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip.Builder#addAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ActionStrip.Builder.addAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ActionStrip.Builder#build():
-    Removed method androidx.car.app.model.ActionStrip.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert:
-    Removed class androidx.car.app.model.Alert from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert#getActions():
-    Removed method androidx.car.app.model.Alert.getActions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert#getCallbackDelegate():
-    Removed method androidx.car.app.model.Alert.getCallbackDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert#getDurationMillis():
-    Removed method androidx.car.app.model.Alert.getDurationMillis() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert#getIcon():
-    Removed method androidx.car.app.model.Alert.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert#getId():
-    Removed method androidx.car.app.model.Alert.getId() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert#getSubtitle():
-    Removed method androidx.car.app.model.Alert.getSubtitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert#getTitle():
-    Removed method androidx.car.app.model.Alert.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder:
-    Removed class androidx.car.app.model.Alert.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#Builder(int, androidx.car.app.model.CarText, long):
-    Removed constructor androidx.car.app.model.Alert.Builder(int,androidx.car.app.model.CarText,long) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#Builder(int, androidx.car.app.model.CarText, long) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Alert.Builder(int arg1, androidx.car.app.model.CarText arg2, long arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#Builder(int, androidx.car.app.model.CarText, long) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.Alert.Builder(int arg1, androidx.car.app.model.CarText arg2, long arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#Builder(int, androidx.car.app.model.CarText, long) parameter #2:
-    Removed parameter arg3 in androidx.car.app.model.Alert.Builder(int arg1, androidx.car.app.model.CarText arg2, long arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#addAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.Alert.Builder.addAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#addAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Alert.Builder.addAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#build():
-    Removed method androidx.car.app.model.Alert.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#setCallback(androidx.car.app.model.AlertCallback):
-    Removed method androidx.car.app.model.Alert.Builder.setCallback(androidx.car.app.model.AlertCallback) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#setCallback(androidx.car.app.model.AlertCallback) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Alert.Builder.setCallback(androidx.car.app.model.AlertCallback arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#setIcon(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.model.Alert.Builder.setIcon(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#setIcon(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Alert.Builder.setIcon(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#setSubtitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.Alert.Builder.setSubtitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Alert.Builder#setSubtitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Alert.Builder.setSubtitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor:
-    Removed class androidx.car.app.model.CarColor from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#BLUE:
-    Removed field androidx.car.app.model.CarColor.BLUE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#DEFAULT:
-    Removed field androidx.car.app.model.CarColor.DEFAULT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#GREEN:
-    Removed field androidx.car.app.model.CarColor.GREEN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#PRIMARY:
-    Removed field androidx.car.app.model.CarColor.PRIMARY from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#RED:
-    Removed field androidx.car.app.model.CarColor.RED from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#SECONDARY:
-    Removed field androidx.car.app.model.CarColor.SECONDARY from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_BLUE:
-    Removed field androidx.car.app.model.CarColor.TYPE_BLUE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_CUSTOM:
-    Removed field androidx.car.app.model.CarColor.TYPE_CUSTOM from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_DEFAULT:
-    Removed field androidx.car.app.model.CarColor.TYPE_DEFAULT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_GREEN:
-    Removed field androidx.car.app.model.CarColor.TYPE_GREEN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_PRIMARY:
-    Removed field androidx.car.app.model.CarColor.TYPE_PRIMARY from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_RED:
-    Removed field androidx.car.app.model.CarColor.TYPE_RED from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_SECONDARY:
-    Removed field androidx.car.app.model.CarColor.TYPE_SECONDARY from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#TYPE_YELLOW:
-    Removed field androidx.car.app.model.CarColor.TYPE_YELLOW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#YELLOW:
-    Removed field androidx.car.app.model.CarColor.YELLOW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#createCustom(int, int):
-    Removed method androidx.car.app.model.CarColor.createCustom(int,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#createCustom(int, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarColor.createCustom(int arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#createCustom(int, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.CarColor.createCustom(int arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#getColor():
-    Removed method androidx.car.app.model.CarColor.getColor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#getColorDark():
-    Removed method androidx.car.app.model.CarColor.getColorDark() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarColor#getType():
-    Removed method androidx.car.app.model.CarColor.getType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon:
-    Removed class androidx.car.app.model.CarIcon from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#ALERT:
-    Removed field androidx.car.app.model.CarIcon.ALERT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#APP_ICON:
-    Removed field androidx.car.app.model.CarIcon.APP_ICON from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#BACK:
-    Removed field androidx.car.app.model.CarIcon.BACK from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#ERROR:
-    Removed field androidx.car.app.model.CarIcon.ERROR from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#PAN:
-    Removed field androidx.car.app.model.CarIcon.PAN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#TYPE_ALERT:
-    Removed field androidx.car.app.model.CarIcon.TYPE_ALERT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#TYPE_APP_ICON:
-    Removed field androidx.car.app.model.CarIcon.TYPE_APP_ICON from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#TYPE_BACK:
-    Removed field androidx.car.app.model.CarIcon.TYPE_BACK from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#TYPE_CUSTOM:
-    Removed field androidx.car.app.model.CarIcon.TYPE_CUSTOM from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#TYPE_ERROR:
-    Removed field androidx.car.app.model.CarIcon.TYPE_ERROR from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#TYPE_PAN:
-    Removed field androidx.car.app.model.CarIcon.TYPE_PAN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#getIcon():
-    Removed method androidx.car.app.model.CarIcon.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#getTint():
-    Removed method androidx.car.app.model.CarIcon.getTint() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon#getType():
-    Removed method androidx.car.app.model.CarIcon.getType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder:
-    Removed class androidx.car.app.model.CarIcon.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder#Builder(androidx.car.app.model.CarIcon):
-    Removed constructor androidx.car.app.model.CarIcon.Builder(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder#Builder(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarIcon.Builder(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder#Builder(androidx.core.graphics.drawable.IconCompat):
-    Removed constructor androidx.car.app.model.CarIcon.Builder(androidx.core.graphics.drawable.IconCompat) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder#Builder(androidx.core.graphics.drawable.IconCompat) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarIcon.Builder(androidx.core.graphics.drawable.IconCompat arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder#build():
-    Removed method androidx.car.app.model.CarIcon.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder#setTint(androidx.car.app.model.CarColor):
-    Removed method androidx.car.app.model.CarIcon.Builder.setTint(androidx.car.app.model.CarColor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIcon.Builder#setTint(androidx.car.app.model.CarColor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarIcon.Builder.setTint(androidx.car.app.model.CarColor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan:
-    Removed class androidx.car.app.model.CarIconSpan from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#ALIGN_BASELINE:
-    Removed field androidx.car.app.model.CarIconSpan.ALIGN_BASELINE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#ALIGN_BOTTOM:
-    Removed field androidx.car.app.model.CarIconSpan.ALIGN_BOTTOM from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#ALIGN_CENTER:
-    Removed field androidx.car.app.model.CarIconSpan.ALIGN_CENTER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#create(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.model.CarIconSpan.create(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#create(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarIconSpan.create(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#create(androidx.car.app.model.CarIcon, int):
-    Removed method androidx.car.app.model.CarIconSpan.create(androidx.car.app.model.CarIcon,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#create(androidx.car.app.model.CarIcon, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarIconSpan.create(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#create(androidx.car.app.model.CarIcon, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.CarIconSpan.create(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#getAlignment():
-    Removed method androidx.car.app.model.CarIconSpan.getAlignment() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarIconSpan#getIcon():
-    Removed method androidx.car.app.model.CarIconSpan.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation:
-    Removed class androidx.car.app.model.CarLocation from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation#create(android.location.Location):
-    Removed method androidx.car.app.model.CarLocation.create(android.location.Location) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation#create(android.location.Location) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarLocation.create(android.location.Location arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation#create(double, double):
-    Removed method androidx.car.app.model.CarLocation.create(double,double) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation#create(double, double) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarLocation.create(double arg1, double arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation#create(double, double) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.CarLocation.create(double arg1, double arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation#getLatitude():
-    Removed method androidx.car.app.model.CarLocation.getLatitude() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarLocation#getLongitude():
-    Removed method androidx.car.app.model.CarLocation.getLongitude() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarSpan:
-    Removed class androidx.car.app.model.CarSpan from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarSpan#CarSpan():
-    Removed constructor androidx.car.app.model.CarSpan() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarSpan#updateDrawState(android.text.TextPaint):
-    Removed method androidx.car.app.model.CarSpan.updateDrawState(android.text.TextPaint) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarSpan#updateDrawState(android.text.TextPaint) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarSpan.updateDrawState(android.text.TextPaint arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText:
-    Removed class androidx.car.app.model.CarText from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText#create(CharSequence):
-    Removed method androidx.car.app.model.CarText.create(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText#create(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarText.create(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText#getVariants():
-    Removed method androidx.car.app.model.CarText.getVariants() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText#isEmpty():
-    Removed method androidx.car.app.model.CarText.isEmpty() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText#isNullOrEmpty(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.CarText.isNullOrEmpty(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText#isNullOrEmpty(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarText.isNullOrEmpty(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText#toCharSequence():
-    Removed method androidx.car.app.model.CarText.toCharSequence() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText.Builder:
-    Removed class androidx.car.app.model.CarText.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText.Builder#Builder(CharSequence):
-    Removed constructor androidx.car.app.model.CarText.Builder(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText.Builder#Builder(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarText.Builder(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText.Builder#addVariant(CharSequence):
-    Removed method androidx.car.app.model.CarText.Builder.addVariant(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText.Builder#addVariant(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.CarText.Builder.addVariant(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.CarText.Builder#build():
-    Removed method androidx.car.app.model.CarText.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ClickableSpan:
-    Removed class androidx.car.app.model.ClickableSpan from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ClickableSpan#create(androidx.car.app.model.OnClickListener):
-    Removed method androidx.car.app.model.ClickableSpan.create(androidx.car.app.model.OnClickListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ClickableSpan#create(androidx.car.app.model.OnClickListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ClickableSpan.create(androidx.car.app.model.OnClickListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ClickableSpan#getOnClickDelegate():
-    Removed method androidx.car.app.model.ClickableSpan.getOnClickDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone:
-    Removed class androidx.car.app.model.DateTimeWithZone from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(java.time.ZonedDateTime):
-    Removed method androidx.car.app.model.DateTimeWithZone.create(java.time.ZonedDateTime) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(java.time.ZonedDateTime) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.DateTimeWithZone.create(java.time.ZonedDateTime arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(long, int, String):
-    Removed method androidx.car.app.model.DateTimeWithZone.create(long,int,String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(long, int, String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.DateTimeWithZone.create(long arg1, int arg2, String arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(long, int, String) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.DateTimeWithZone.create(long arg1, int arg2, String arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(long, int, String) parameter #2:
-    Removed parameter arg3 in androidx.car.app.model.DateTimeWithZone.create(long arg1, int arg2, String arg3) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(long, java.util.TimeZone):
-    Removed method androidx.car.app.model.DateTimeWithZone.create(long,java.util.TimeZone) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(long, java.util.TimeZone) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.DateTimeWithZone.create(long arg1, java.util.TimeZone arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#create(long, java.util.TimeZone) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.DateTimeWithZone.create(long arg1, java.util.TimeZone arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#getTimeSinceEpochMillis():
-    Removed method androidx.car.app.model.DateTimeWithZone.getTimeSinceEpochMillis() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#getZoneOffsetSeconds():
-    Removed method androidx.car.app.model.DateTimeWithZone.getZoneOffsetSeconds() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DateTimeWithZone#getZoneShortName():
-    Removed method androidx.car.app.model.DateTimeWithZone.getZoneShortName() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance:
-    Removed class androidx.car.app.model.Distance from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#UNIT_FEET:
-    Removed field androidx.car.app.model.Distance.UNIT_FEET from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#UNIT_KILOMETERS:
-    Removed field androidx.car.app.model.Distance.UNIT_KILOMETERS from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#UNIT_KILOMETERS_P1:
-    Removed field androidx.car.app.model.Distance.UNIT_KILOMETERS_P1 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#UNIT_METERS:
-    Removed field androidx.car.app.model.Distance.UNIT_METERS from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#UNIT_MILES:
-    Removed field androidx.car.app.model.Distance.UNIT_MILES from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#UNIT_MILES_P1:
-    Removed field androidx.car.app.model.Distance.UNIT_MILES_P1 from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#UNIT_YARDS:
-    Removed field androidx.car.app.model.Distance.UNIT_YARDS from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#create(double, int):
-    Removed method androidx.car.app.model.Distance.create(double,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#create(double, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Distance.create(double arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#create(double, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.Distance.create(double arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#getDisplayDistance():
-    Removed method androidx.car.app.model.Distance.getDisplayDistance() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Distance#getDisplayUnit():
-    Removed method androidx.car.app.model.Distance.getDisplayUnit() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DistanceSpan:
-    Removed class androidx.car.app.model.DistanceSpan from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DistanceSpan#create(androidx.car.app.model.Distance):
-    Removed method androidx.car.app.model.DistanceSpan.create(androidx.car.app.model.Distance) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DistanceSpan#create(androidx.car.app.model.Distance) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.DistanceSpan.create(androidx.car.app.model.Distance arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DistanceSpan#getDistance():
-    Removed method androidx.car.app.model.DistanceSpan.getDistance() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DurationSpan:
-    Removed class androidx.car.app.model.DurationSpan from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DurationSpan#create(java.time.Duration):
-    Removed method androidx.car.app.model.DurationSpan.create(java.time.Duration) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DurationSpan#create(java.time.Duration) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.DurationSpan.create(java.time.Duration arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DurationSpan#create(long):
-    Removed method androidx.car.app.model.DurationSpan.create(long) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DurationSpan#create(long) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.DurationSpan.create(long arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.DurationSpan#getDurationSeconds():
-    Removed method androidx.car.app.model.DurationSpan.getDurationSeconds() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ForegroundCarColorSpan:
-    Removed class androidx.car.app.model.ForegroundCarColorSpan from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ForegroundCarColorSpan#create(androidx.car.app.model.CarColor):
-    Removed method androidx.car.app.model.ForegroundCarColorSpan.create(androidx.car.app.model.CarColor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ForegroundCarColorSpan#create(androidx.car.app.model.CarColor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ForegroundCarColorSpan.create(androidx.car.app.model.CarColor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ForegroundCarColorSpan#getColor():
-    Removed method androidx.car.app.model.ForegroundCarColorSpan.getColor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem:
-    Removed class androidx.car.app.model.GridItem from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#IMAGE_TYPE_ICON:
-    Removed field androidx.car.app.model.GridItem.IMAGE_TYPE_ICON from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#IMAGE_TYPE_LARGE:
-    Removed field androidx.car.app.model.GridItem.IMAGE_TYPE_LARGE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#getImage():
-    Removed method androidx.car.app.model.GridItem.getImage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#getImageType():
-    Removed method androidx.car.app.model.GridItem.getImageType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#getOnClickDelegate():
-    Removed method androidx.car.app.model.GridItem.getOnClickDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#getText():
-    Removed method androidx.car.app.model.GridItem.getText() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#getTitle():
-    Removed method androidx.car.app.model.GridItem.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem#isLoading():
-    Removed method androidx.car.app.model.GridItem.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder:
-    Removed class androidx.car.app.model.GridItem.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#Builder():
-    Removed constructor androidx.car.app.model.GridItem.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#build():
-    Removed method androidx.car.app.model.GridItem.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setImage(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.model.GridItem.Builder.setImage(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setImage(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setImage(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setImage(androidx.car.app.model.CarIcon, int):
-    Removed method androidx.car.app.model.GridItem.Builder.setImage(androidx.car.app.model.CarIcon,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setImage(androidx.car.app.model.CarIcon, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setImage(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setImage(androidx.car.app.model.CarIcon, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.GridItem.Builder.setImage(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.GridItem.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setOnClickListener(androidx.car.app.model.OnClickListener):
-    Removed method androidx.car.app.model.GridItem.Builder.setOnClickListener(androidx.car.app.model.OnClickListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setOnClickListener(androidx.car.app.model.OnClickListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setOnClickListener(androidx.car.app.model.OnClickListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setText(CharSequence):
-    Removed method androidx.car.app.model.GridItem.Builder.setText(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setText(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setText(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setText(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.GridItem.Builder.setText(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setText(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setText(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.GridItem.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setTitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.GridItem.Builder.setTitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridItem.Builder#setTitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridItem.Builder.setTitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate:
-    Removed class androidx.car.app.model.GridTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate#getActionStrip():
-    Removed method androidx.car.app.model.GridTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.GridTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate#getSingleList():
-    Removed method androidx.car.app.model.GridTemplate.getSingleList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate#getTitle():
-    Removed method androidx.car.app.model.GridTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate#isLoading():
-    Removed method androidx.car.app.model.GridTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder:
-    Removed class androidx.car.app.model.GridTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#Builder():
-    Removed constructor androidx.car.app.model.GridTemplate.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#build():
-    Removed method androidx.car.app.model.GridTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.GridTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.GridTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.GridTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setSingleList(androidx.car.app.model.ItemList):
-    Removed method androidx.car.app.model.GridTemplate.Builder.setSingleList(androidx.car.app.model.ItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setSingleList(androidx.car.app.model.ItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridTemplate.Builder.setSingleList(androidx.car.app.model.ItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.GridTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.GridTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.GridTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header:
-    Removed class androidx.car.app.model.Header from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header#getEndHeaderActions():
-    Removed method androidx.car.app.model.Header.getEndHeaderActions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header#getStartHeaderAction():
-    Removed method androidx.car.app.model.Header.getStartHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header#getTitle():
-    Removed method androidx.car.app.model.Header.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder:
-    Removed class androidx.car.app.model.Header.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#Builder():
-    Removed constructor androidx.car.app.model.Header.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#addEndHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.Header.Builder.addEndHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#addEndHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Header.Builder.addEndHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#build():
-    Removed method androidx.car.app.model.Header.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#setStartHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.Header.Builder.setStartHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#setStartHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Header.Builder.setStartHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.Header.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Header.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#setTitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.Header.Builder.setTitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Header.Builder#setTitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Header.Builder.setTitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList:
-    Removed class androidx.car.app.model.ItemList from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList#getItems():
-    Removed method androidx.car.app.model.ItemList.getItems() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList#getNoItemsMessage():
-    Removed method androidx.car.app.model.ItemList.getNoItemsMessage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList#getOnItemVisibilityChangedDelegate():
-    Removed method androidx.car.app.model.ItemList.getOnItemVisibilityChangedDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList#getOnSelectedDelegate():
-    Removed method androidx.car.app.model.ItemList.getOnSelectedDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList#getSelectedIndex():
-    Removed method androidx.car.app.model.ItemList.getSelectedIndex() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder:
-    Removed class androidx.car.app.model.ItemList.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#Builder():
-    Removed constructor androidx.car.app.model.ItemList.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#addItem(androidx.car.app.model.Item):
-    Removed method androidx.car.app.model.ItemList.Builder.addItem(androidx.car.app.model.Item) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#addItem(androidx.car.app.model.Item) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ItemList.Builder.addItem(androidx.car.app.model.Item arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#build():
-    Removed method androidx.car.app.model.ItemList.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setNoItemsMessage(CharSequence):
-    Removed method androidx.car.app.model.ItemList.Builder.setNoItemsMessage(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setNoItemsMessage(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ItemList.Builder.setNoItemsMessage(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener):
-    Removed method androidx.car.app.model.ItemList.Builder.setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ItemList.Builder.setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener):
-    Removed method androidx.car.app.model.ItemList.Builder.setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ItemList.Builder.setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setSelectedIndex(int):
-    Removed method androidx.car.app.model.ItemList.Builder.setSelectedIndex(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.Builder#setSelectedIndex(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ItemList.Builder.setSelectedIndex(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.OnItemVisibilityChangedListener:
-    Removed class androidx.car.app.model.ItemList.OnItemVisibilityChangedListener from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.OnItemVisibilityChangedListener#onItemVisibilityChanged(int, int):
-    Removed method androidx.car.app.model.ItemList.OnItemVisibilityChangedListener.onItemVisibilityChanged(int,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.OnItemVisibilityChangedListener#onItemVisibilityChanged(int, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ItemList.OnItemVisibilityChangedListener.onItemVisibilityChanged(int arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.OnItemVisibilityChangedListener#onItemVisibilityChanged(int, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.ItemList.OnItemVisibilityChangedListener.onItemVisibilityChanged(int arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.OnSelectedListener:
-    Removed class androidx.car.app.model.ItemList.OnSelectedListener from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.OnSelectedListener#onSelected(int):
-    Removed method androidx.car.app.model.ItemList.OnSelectedListener.onSelected(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ItemList.OnSelectedListener#onSelected(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ItemList.OnSelectedListener.onSelected(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate:
-    Removed class androidx.car.app.model.ListTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate#getActionStrip():
-    Removed method androidx.car.app.model.ListTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.ListTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate#getSectionedLists():
-    Removed method androidx.car.app.model.ListTemplate.getSectionedLists() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate#getSingleList():
-    Removed method androidx.car.app.model.ListTemplate.getSingleList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate#getTitle():
-    Removed method androidx.car.app.model.ListTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate#isLoading():
-    Removed method androidx.car.app.model.ListTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder:
-    Removed class androidx.car.app.model.ListTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#Builder():
-    Removed constructor androidx.car.app.model.ListTemplate.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#addSectionedList(androidx.car.app.model.SectionedItemList):
-    Removed method androidx.car.app.model.ListTemplate.Builder.addSectionedList(androidx.car.app.model.SectionedItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#addSectionedList(androidx.car.app.model.SectionedItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ListTemplate.Builder.addSectionedList(androidx.car.app.model.SectionedItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#build():
-    Removed method androidx.car.app.model.ListTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.ListTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ListTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.ListTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ListTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.ListTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ListTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setSingleList(androidx.car.app.model.ItemList):
-    Removed method androidx.car.app.model.ListTemplate.Builder.setSingleList(androidx.car.app.model.ItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setSingleList(androidx.car.app.model.ItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ListTemplate.Builder.setSingleList(androidx.car.app.model.ItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.ListTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ListTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ListTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate:
-    Removed class androidx.car.app.model.LongMessageTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate#getActionStrip():
-    Removed method androidx.car.app.model.LongMessageTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate#getActions():
-    Removed method androidx.car.app.model.LongMessageTemplate.getActions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.LongMessageTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate#getMessage():
-    Removed method androidx.car.app.model.LongMessageTemplate.getMessage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate#getTitle():
-    Removed method androidx.car.app.model.LongMessageTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder:
-    Removed class androidx.car.app.model.LongMessageTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#Builder(CharSequence):
-    Removed constructor androidx.car.app.model.LongMessageTemplate.Builder(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#Builder(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.LongMessageTemplate.Builder(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#addAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.LongMessageTemplate.Builder.addAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#addAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.LongMessageTemplate.Builder.addAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#build():
-    Removed method androidx.car.app.model.LongMessageTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.LongMessageTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.LongMessageTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.LongMessageTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.LongMessageTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.LongMessageTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.LongMessageTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.LongMessageTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate:
-    Removed class androidx.car.app.model.MessageTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#getActionStrip():
-    Removed method androidx.car.app.model.MessageTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#getActions():
-    Removed method androidx.car.app.model.MessageTemplate.getActions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#getDebugMessage():
-    Removed method androidx.car.app.model.MessageTemplate.getDebugMessage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.MessageTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#getIcon():
-    Removed method androidx.car.app.model.MessageTemplate.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#getMessage():
-    Removed method androidx.car.app.model.MessageTemplate.getMessage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#getTitle():
-    Removed method androidx.car.app.model.MessageTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate#isLoading():
-    Removed method androidx.car.app.model.MessageTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder:
-    Removed class androidx.car.app.model.MessageTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#Builder(CharSequence):
-    Removed constructor androidx.car.app.model.MessageTemplate.Builder(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#Builder(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#Builder(androidx.car.app.model.CarText):
-    Removed constructor androidx.car.app.model.MessageTemplate.Builder(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#Builder(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#addAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.addAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#addAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.addAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#build():
-    Removed method androidx.car.app.model.MessageTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setDebugMessage(String):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.setDebugMessage(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setDebugMessage(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.setDebugMessage(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setDebugMessage(Throwable):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.setDebugMessage(Throwable) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setDebugMessage(Throwable) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.setDebugMessage(Throwable arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setIcon(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.setIcon(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setIcon(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.setIcon(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.MessageTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.MessageTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.MessageTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata:
-    Removed class androidx.car.app.model.Metadata from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata#EMPTY_METADATA:
-    Removed field androidx.car.app.model.Metadata.EMPTY_METADATA from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata#getPlace():
-    Removed method androidx.car.app.model.Metadata.getPlace() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata.Builder:
-    Removed class androidx.car.app.model.Metadata.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata.Builder#Builder():
-    Removed constructor androidx.car.app.model.Metadata.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata.Builder#Builder(androidx.car.app.model.Metadata):
-    Removed constructor androidx.car.app.model.Metadata.Builder(androidx.car.app.model.Metadata) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata.Builder#Builder(androidx.car.app.model.Metadata) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Metadata.Builder(androidx.car.app.model.Metadata arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata.Builder#build():
-    Removed method androidx.car.app.model.Metadata.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata.Builder#setPlace(androidx.car.app.model.Place):
-    Removed method androidx.car.app.model.Metadata.Builder.setPlace(androidx.car.app.model.Place) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Metadata.Builder#setPlace(androidx.car.app.model.Place) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Metadata.Builder.setPlace(androidx.car.app.model.Place arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane:
-    Removed class androidx.car.app.model.Pane from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane#getActions():
-    Removed method androidx.car.app.model.Pane.getActions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane#getImage():
-    Removed method androidx.car.app.model.Pane.getImage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane#getRows():
-    Removed method androidx.car.app.model.Pane.getRows() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane#isLoading():
-    Removed method androidx.car.app.model.Pane.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder:
-    Removed class androidx.car.app.model.Pane.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#Builder():
-    Removed constructor androidx.car.app.model.Pane.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#addAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.Pane.Builder.addAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#addAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Pane.Builder.addAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#addRow(androidx.car.app.model.Row):
-    Removed method androidx.car.app.model.Pane.Builder.addRow(androidx.car.app.model.Row) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#addRow(androidx.car.app.model.Row) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Pane.Builder.addRow(androidx.car.app.model.Row arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#build():
-    Removed method androidx.car.app.model.Pane.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#setImage(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.model.Pane.Builder.setImage(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#setImage(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Pane.Builder.setImage(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.Pane.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Pane.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Pane.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate:
-    Removed class androidx.car.app.model.PaneTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate#getActionStrip():
-    Removed method androidx.car.app.model.PaneTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.PaneTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate#getPane():
-    Removed method androidx.car.app.model.PaneTemplate.getPane() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate#getTitle():
-    Removed method androidx.car.app.model.PaneTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder:
-    Removed class androidx.car.app.model.PaneTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#Builder(androidx.car.app.model.Pane):
-    Removed constructor androidx.car.app.model.PaneTemplate.Builder(androidx.car.app.model.Pane) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#Builder(androidx.car.app.model.Pane) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PaneTemplate.Builder(androidx.car.app.model.Pane arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#build():
-    Removed method androidx.car.app.model.PaneTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.PaneTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PaneTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.PaneTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PaneTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.PaneTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PaneTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PaneTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ParkedOnlyOnClickListener:
-    Removed class androidx.car.app.model.ParkedOnlyOnClickListener from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ParkedOnlyOnClickListener#create(androidx.car.app.model.OnClickListener):
-    Removed method androidx.car.app.model.ParkedOnlyOnClickListener.create(androidx.car.app.model.OnClickListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ParkedOnlyOnClickListener#create(androidx.car.app.model.OnClickListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.ParkedOnlyOnClickListener.create(androidx.car.app.model.OnClickListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.ParkedOnlyOnClickListener#onClick():
-    Removed method androidx.car.app.model.ParkedOnlyOnClickListener.onClick() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place:
-    Removed class androidx.car.app.model.Place from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place#getLocation():
-    Removed method androidx.car.app.model.Place.getLocation() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place#getMarker():
-    Removed method androidx.car.app.model.Place.getMarker() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder:
-    Removed class androidx.car.app.model.Place.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder#Builder(androidx.car.app.model.CarLocation):
-    Removed constructor androidx.car.app.model.Place.Builder(androidx.car.app.model.CarLocation) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder#Builder(androidx.car.app.model.CarLocation) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Place.Builder(androidx.car.app.model.CarLocation arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder#Builder(androidx.car.app.model.Place):
-    Removed constructor androidx.car.app.model.Place.Builder(androidx.car.app.model.Place) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder#Builder(androidx.car.app.model.Place) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Place.Builder(androidx.car.app.model.Place arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder#build():
-    Removed method androidx.car.app.model.Place.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder#setMarker(androidx.car.app.model.PlaceMarker):
-    Removed method androidx.car.app.model.Place.Builder.setMarker(androidx.car.app.model.PlaceMarker) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Place.Builder#setMarker(androidx.car.app.model.PlaceMarker) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Place.Builder.setMarker(androidx.car.app.model.PlaceMarker arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate:
-    Removed class androidx.car.app.model.PlaceListMapTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#getActionStrip():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#getAnchor():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.getAnchor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#getItemList():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.getItemList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#getOnContentRefreshDelegate():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.getOnContentRefreshDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#getTitle():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#isCurrentLocationEnabled():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.isCurrentLocationEnabled() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate#isLoading():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder:
-    Removed class androidx.car.app.model.PlaceListMapTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#Builder():
-    Removed constructor androidx.car.app.model.PlaceListMapTemplate.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#build():
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setAnchor(androidx.car.app.model.Place):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setAnchor(androidx.car.app.model.Place) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setAnchor(androidx.car.app.model.Place) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setAnchor(androidx.car.app.model.Place arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setCurrentLocationEnabled(boolean):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setCurrentLocationEnabled(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setCurrentLocationEnabled(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setCurrentLocationEnabled(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setItemList(androidx.car.app.model.ItemList):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setItemList(androidx.car.app.model.ItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setItemList(androidx.car.app.model.ItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setItemList(androidx.car.app.model.ItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setTitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.PlaceListMapTemplate.Builder.setTitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceListMapTemplate.Builder#setTitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceListMapTemplate.Builder.setTitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker:
-    Removed class androidx.car.app.model.PlaceMarker from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker#TYPE_ICON:
-    Removed field androidx.car.app.model.PlaceMarker.TYPE_ICON from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker#TYPE_IMAGE:
-    Removed field androidx.car.app.model.PlaceMarker.TYPE_IMAGE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker#getColor():
-    Removed method androidx.car.app.model.PlaceMarker.getColor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker#getIcon():
-    Removed method androidx.car.app.model.PlaceMarker.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker#getIconType():
-    Removed method androidx.car.app.model.PlaceMarker.getIconType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker#getLabel():
-    Removed method androidx.car.app.model.PlaceMarker.getLabel() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder:
-    Removed class androidx.car.app.model.PlaceMarker.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#Builder():
-    Removed constructor androidx.car.app.model.PlaceMarker.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#build():
-    Removed method androidx.car.app.model.PlaceMarker.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#setColor(androidx.car.app.model.CarColor):
-    Removed method androidx.car.app.model.PlaceMarker.Builder.setColor(androidx.car.app.model.CarColor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#setColor(androidx.car.app.model.CarColor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceMarker.Builder.setColor(androidx.car.app.model.CarColor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#setIcon(androidx.car.app.model.CarIcon, int):
-    Removed method androidx.car.app.model.PlaceMarker.Builder.setIcon(androidx.car.app.model.CarIcon,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#setIcon(androidx.car.app.model.CarIcon, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceMarker.Builder.setIcon(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#setIcon(androidx.car.app.model.CarIcon, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.PlaceMarker.Builder.setIcon(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#setLabel(CharSequence):
-    Removed method androidx.car.app.model.PlaceMarker.Builder.setLabel(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.PlaceMarker.Builder#setLabel(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.PlaceMarker.Builder.setLabel(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row:
-    Removed class androidx.car.app.model.Row from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#IMAGE_TYPE_ICON:
-    Removed field androidx.car.app.model.Row.IMAGE_TYPE_ICON from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#IMAGE_TYPE_LARGE:
-    Removed field androidx.car.app.model.Row.IMAGE_TYPE_LARGE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#IMAGE_TYPE_SMALL:
-    Removed field androidx.car.app.model.Row.IMAGE_TYPE_SMALL from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#NO_DECORATION:
-    Removed field androidx.car.app.model.Row.NO_DECORATION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#getImage():
-    Removed method androidx.car.app.model.Row.getImage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#getMetadata():
-    Removed method androidx.car.app.model.Row.getMetadata() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#getOnClickDelegate():
-    Removed method androidx.car.app.model.Row.getOnClickDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#getRowImageType():
-    Removed method androidx.car.app.model.Row.getRowImageType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#getTexts():
-    Removed method androidx.car.app.model.Row.getTexts() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#getTitle():
-    Removed method androidx.car.app.model.Row.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#getToggle():
-    Removed method androidx.car.app.model.Row.getToggle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#isBrowsable():
-    Removed method androidx.car.app.model.Row.isBrowsable() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#isEnabled():
-    Removed method androidx.car.app.model.Row.isEnabled() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#row():
-    Removed method androidx.car.app.model.Row.row() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row#yourBoat():
-    Removed method androidx.car.app.model.Row.yourBoat() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder:
-    Removed class androidx.car.app.model.Row.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#Builder():
-    Removed constructor androidx.car.app.model.Row.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#addText(CharSequence):
-    Removed method androidx.car.app.model.Row.Builder.addText(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#addText(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.addText(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#addText(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.Row.Builder.addText(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#addText(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.addText(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#build():
-    Removed method androidx.car.app.model.Row.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setBrowsable(boolean):
-    Removed method androidx.car.app.model.Row.Builder.setBrowsable(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setBrowsable(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setBrowsable(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setEnabled(boolean):
-    Removed method androidx.car.app.model.Row.Builder.setEnabled(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setEnabled(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setEnabled(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setImage(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.model.Row.Builder.setImage(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setImage(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setImage(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setImage(androidx.car.app.model.CarIcon, int):
-    Removed method androidx.car.app.model.Row.Builder.setImage(androidx.car.app.model.CarIcon,int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setImage(androidx.car.app.model.CarIcon, int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setImage(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setImage(androidx.car.app.model.CarIcon, int) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.Row.Builder.setImage(androidx.car.app.model.CarIcon arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setMetadata(androidx.car.app.model.Metadata):
-    Removed method androidx.car.app.model.Row.Builder.setMetadata(androidx.car.app.model.Metadata) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setMetadata(androidx.car.app.model.Metadata) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setMetadata(androidx.car.app.model.Metadata arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setOnClickListener(androidx.car.app.model.OnClickListener):
-    Removed method androidx.car.app.model.Row.Builder.setOnClickListener(androidx.car.app.model.OnClickListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setOnClickListener(androidx.car.app.model.OnClickListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setOnClickListener(androidx.car.app.model.OnClickListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.Row.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setTitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.model.Row.Builder.setTitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setTitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setTitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setToggle(androidx.car.app.model.Toggle):
-    Removed method androidx.car.app.model.Row.Builder.setToggle(androidx.car.app.model.Toggle) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Row.Builder#setToggle(androidx.car.app.model.Toggle) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Row.Builder.setToggle(androidx.car.app.model.Toggle arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate:
-    Removed class androidx.car.app.model.SearchTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#getActionStrip():
-    Removed method androidx.car.app.model.SearchTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.SearchTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#getInitialSearchText():
-    Removed method androidx.car.app.model.SearchTemplate.getInitialSearchText() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#getItemList():
-    Removed method androidx.car.app.model.SearchTemplate.getItemList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#getSearchCallbackDelegate():
-    Removed method androidx.car.app.model.SearchTemplate.getSearchCallbackDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#getSearchHint():
-    Removed method androidx.car.app.model.SearchTemplate.getSearchHint() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#isLoading():
-    Removed method androidx.car.app.model.SearchTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate#isShowKeyboardByDefault():
-    Removed method androidx.car.app.model.SearchTemplate.isShowKeyboardByDefault() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder:
-    Removed class androidx.car.app.model.SearchTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#Builder(androidx.car.app.model.SearchTemplate.SearchCallback):
-    Removed constructor androidx.car.app.model.SearchTemplate.Builder(androidx.car.app.model.SearchTemplate.SearchCallback) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#Builder(androidx.car.app.model.SearchTemplate.SearchCallback) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder(androidx.car.app.model.SearchTemplate.SearchCallback arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#build():
-    Removed method androidx.car.app.model.SearchTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.SearchTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.SearchTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setInitialSearchText(String):
-    Removed method androidx.car.app.model.SearchTemplate.Builder.setInitialSearchText(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setInitialSearchText(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder.setInitialSearchText(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setItemList(androidx.car.app.model.ItemList):
-    Removed method androidx.car.app.model.SearchTemplate.Builder.setItemList(androidx.car.app.model.ItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setItemList(androidx.car.app.model.ItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder.setItemList(androidx.car.app.model.ItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.SearchTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setSearchHint(String):
-    Removed method androidx.car.app.model.SearchTemplate.Builder.setSearchHint(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setSearchHint(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder.setSearchHint(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setShowKeyboardByDefault(boolean):
-    Removed method androidx.car.app.model.SearchTemplate.Builder.setShowKeyboardByDefault(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.Builder#setShowKeyboardByDefault(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.Builder.setShowKeyboardByDefault(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.SearchCallback:
-    Removed class androidx.car.app.model.SearchTemplate.SearchCallback from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.SearchCallback#onSearchSubmitted(String):
-    Removed method androidx.car.app.model.SearchTemplate.SearchCallback.onSearchSubmitted(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.SearchCallback#onSearchSubmitted(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.SearchCallback.onSearchSubmitted(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.SearchCallback#onSearchTextChanged(String):
-    Removed method androidx.car.app.model.SearchTemplate.SearchCallback.onSearchTextChanged(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SearchTemplate.SearchCallback#onSearchTextChanged(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SearchTemplate.SearchCallback.onSearchTextChanged(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SectionedItemList:
-    Removed class androidx.car.app.model.SectionedItemList from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SectionedItemList#create(androidx.car.app.model.ItemList, CharSequence):
-    Removed method androidx.car.app.model.SectionedItemList.create(androidx.car.app.model.ItemList,CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SectionedItemList#create(androidx.car.app.model.ItemList, CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.SectionedItemList.create(androidx.car.app.model.ItemList arg1, CharSequence arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SectionedItemList#create(androidx.car.app.model.ItemList, CharSequence) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.SectionedItemList.create(androidx.car.app.model.ItemList arg1, CharSequence arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SectionedItemList#getHeader():
-    Removed method androidx.car.app.model.SectionedItemList.getHeader() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.SectionedItemList#getItemList():
-    Removed method androidx.car.app.model.SectionedItemList.getItemList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateInfo:
-    Removed class androidx.car.app.model.TemplateInfo from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateInfo#TemplateInfo(Class<? extends androidx.car.app.model.Template>, String):
-    Removed constructor androidx.car.app.model.TemplateInfo(Class<? extends androidx.car.app.model.Template>,String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateInfo#TemplateInfo(Class<? extends androidx.car.app.model.Template>, String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateInfo(Class<? extends androidx.car.app.model.Template> arg1, String arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateInfo#TemplateInfo(Class<? extends androidx.car.app.model.Template>, String) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.TemplateInfo(Class<? extends androidx.car.app.model.Template> arg1, String arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateInfo#getTemplateClass():
-    Removed method androidx.car.app.model.TemplateInfo.getTemplateClass() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateInfo#getTemplateId():
-    Removed method androidx.car.app.model.TemplateInfo.getTemplateId() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper:
-    Removed class androidx.car.app.model.TemplateWrapper from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#copyOf(androidx.car.app.model.TemplateWrapper):
-    Removed method androidx.car.app.model.TemplateWrapper.copyOf(androidx.car.app.model.TemplateWrapper) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#copyOf(androidx.car.app.model.TemplateWrapper) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.copyOf(androidx.car.app.model.TemplateWrapper arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getCurrentTaskStep():
-    Removed method androidx.car.app.model.TemplateWrapper.getCurrentTaskStep() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getId():
-    Removed method androidx.car.app.model.TemplateWrapper.getId() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getTemplate():
-    Removed method androidx.car.app.model.TemplateWrapper.getTemplate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#getTemplateInfosForScreenStack():
-    Removed method androidx.car.app.model.TemplateWrapper.getTemplateInfosForScreenStack() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#isRefresh():
-    Removed method androidx.car.app.model.TemplateWrapper.isRefresh() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setCurrentTaskStep(int):
-    Removed method androidx.car.app.model.TemplateWrapper.setCurrentTaskStep(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setCurrentTaskStep(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setCurrentTaskStep(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setId(String):
-    Removed method androidx.car.app.model.TemplateWrapper.setId(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setId(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setId(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setRefresh(boolean):
-    Removed method androidx.car.app.model.TemplateWrapper.setRefresh(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setRefresh(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setRefresh(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setTemplate(androidx.car.app.model.Template):
-    Removed method androidx.car.app.model.TemplateWrapper.setTemplate(androidx.car.app.model.Template) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#setTemplate(androidx.car.app.model.Template) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.setTemplate(androidx.car.app.model.Template arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template):
-    Removed method androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template, String):
-    Removed method androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template,String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template, String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template arg1, String arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.TemplateWrapper#wrap(androidx.car.app.model.Template, String) parameter #1:
-    Removed parameter arg2 in androidx.car.app.model.TemplateWrapper.wrap(androidx.car.app.model.Template arg1, String arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle:
-    Removed class androidx.car.app.model.Toggle from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle#getOnCheckedChangeDelegate():
-    Removed method androidx.car.app.model.Toggle.getOnCheckedChangeDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle#isChecked():
-    Removed method androidx.car.app.model.Toggle.isChecked() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle#isEnabled():
-    Removed method androidx.car.app.model.Toggle.isEnabled() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder:
-    Removed class androidx.car.app.model.Toggle.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder#Builder(androidx.car.app.model.Toggle.OnCheckedChangeListener):
-    Removed constructor androidx.car.app.model.Toggle.Builder(androidx.car.app.model.Toggle.OnCheckedChangeListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder#Builder(androidx.car.app.model.Toggle.OnCheckedChangeListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Toggle.Builder(androidx.car.app.model.Toggle.OnCheckedChangeListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder#build():
-    Removed method androidx.car.app.model.Toggle.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder#setChecked(boolean):
-    Removed method androidx.car.app.model.Toggle.Builder.setChecked(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder#setChecked(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Toggle.Builder.setChecked(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder#setEnabled(boolean):
-    Removed method androidx.car.app.model.Toggle.Builder.setEnabled(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.Builder#setEnabled(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Toggle.Builder.setEnabled(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.OnCheckedChangeListener:
-    Removed class androidx.car.app.model.Toggle.OnCheckedChangeListener from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.OnCheckedChangeListener#onCheckedChange(boolean):
-    Removed method androidx.car.app.model.Toggle.OnCheckedChangeListener.onCheckedChange(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.Toggle.OnCheckedChangeListener#onCheckedChange(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.Toggle.OnCheckedChangeListener.onCheckedChange(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod:
-    Removed class androidx.car.app.model.signin.InputSignInMethod from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#INPUT_TYPE_DEFAULT:
-    Removed field androidx.car.app.model.signin.InputSignInMethod.INPUT_TYPE_DEFAULT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#INPUT_TYPE_PASSWORD:
-    Removed field androidx.car.app.model.signin.InputSignInMethod.INPUT_TYPE_PASSWORD from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#KEYBOARD_DEFAULT:
-    Removed field androidx.car.app.model.signin.InputSignInMethod.KEYBOARD_DEFAULT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#KEYBOARD_EMAIL:
-    Removed field androidx.car.app.model.signin.InputSignInMethod.KEYBOARD_EMAIL from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#KEYBOARD_NUMBER:
-    Removed field androidx.car.app.model.signin.InputSignInMethod.KEYBOARD_NUMBER from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#KEYBOARD_PHONE:
-    Removed field androidx.car.app.model.signin.InputSignInMethod.KEYBOARD_PHONE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#getDefaultValue():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.getDefaultValue() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#getErrorMessage():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.getErrorMessage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#getHint():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.getHint() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#getInputCallbackDelegate():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.getInputCallbackDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#getInputType():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.getInputType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#getKeyboardType():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.getKeyboardType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod#isShowKeyboardByDefault():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.isShowKeyboardByDefault() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder:
-    Removed class androidx.car.app.model.signin.InputSignInMethod.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#Builder(androidx.car.app.model.InputCallback):
-    Removed constructor androidx.car.app.model.signin.InputSignInMethod.Builder(androidx.car.app.model.InputCallback) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#Builder(androidx.car.app.model.InputCallback) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.InputSignInMethod.Builder(androidx.car.app.model.InputCallback arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#build():
-    Removed method androidx.car.app.model.signin.InputSignInMethod.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setDefaultValue(String):
-    Removed method androidx.car.app.model.signin.InputSignInMethod.Builder.setDefaultValue(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setDefaultValue(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.InputSignInMethod.Builder.setDefaultValue(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setErrorMessage(CharSequence):
-    Removed method androidx.car.app.model.signin.InputSignInMethod.Builder.setErrorMessage(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setErrorMessage(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.InputSignInMethod.Builder.setErrorMessage(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setHint(CharSequence):
-    Removed method androidx.car.app.model.signin.InputSignInMethod.Builder.setHint(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setHint(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.InputSignInMethod.Builder.setHint(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setInputType(int):
-    Removed method androidx.car.app.model.signin.InputSignInMethod.Builder.setInputType(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setInputType(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.InputSignInMethod.Builder.setInputType(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setKeyboardType(int):
-    Removed method androidx.car.app.model.signin.InputSignInMethod.Builder.setKeyboardType(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setKeyboardType(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.InputSignInMethod.Builder.setKeyboardType(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setShowKeyboardByDefault(boolean):
-    Removed method androidx.car.app.model.signin.InputSignInMethod.Builder.setShowKeyboardByDefault(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.InputSignInMethod.Builder#setShowKeyboardByDefault(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.InputSignInMethod.Builder.setShowKeyboardByDefault(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.PinSignInMethod:
-    Removed class androidx.car.app.model.signin.PinSignInMethod from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.PinSignInMethod#PinSignInMethod(CharSequence):
-    Removed constructor androidx.car.app.model.signin.PinSignInMethod(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.PinSignInMethod#PinSignInMethod(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.PinSignInMethod(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.PinSignInMethod#getPinCode():
-    Removed method androidx.car.app.model.signin.PinSignInMethod.getPinCode() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.ProviderSignInMethod:
-    Removed class androidx.car.app.model.signin.ProviderSignInMethod from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.ProviderSignInMethod#ProviderSignInMethod(androidx.car.app.model.Action):
-    Removed constructor androidx.car.app.model.signin.ProviderSignInMethod(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.ProviderSignInMethod#ProviderSignInMethod(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.ProviderSignInMethod(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.ProviderSignInMethod#getAction():
-    Removed method androidx.car.app.model.signin.ProviderSignInMethod.getAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.QRCodeSignInMethod:
-    Removed class androidx.car.app.model.signin.QRCodeSignInMethod from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.QRCodeSignInMethod#QRCodeSignInMethod(android.net.Uri):
-    Removed constructor androidx.car.app.model.signin.QRCodeSignInMethod(android.net.Uri) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.QRCodeSignInMethod#QRCodeSignInMethod(android.net.Uri) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.QRCodeSignInMethod(android.net.Uri arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.QRCodeSignInMethod#getUri():
-    Removed method androidx.car.app.model.signin.QRCodeSignInMethod.getUri() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate:
-    Removed class androidx.car.app.model.signin.SignInTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#getActionStrip():
-    Removed method androidx.car.app.model.signin.SignInTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#getActions():
-    Removed method androidx.car.app.model.signin.SignInTemplate.getActions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#getAdditionalText():
-    Removed method androidx.car.app.model.signin.SignInTemplate.getAdditionalText() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#getHeaderAction():
-    Removed method androidx.car.app.model.signin.SignInTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#getInstructions():
-    Removed method androidx.car.app.model.signin.SignInTemplate.getInstructions() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#getSignInMethod():
-    Removed method androidx.car.app.model.signin.SignInTemplate.getSignInMethod() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#getTitle():
-    Removed method androidx.car.app.model.signin.SignInTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate#isLoading():
-    Removed method androidx.car.app.model.signin.SignInTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder:
-    Removed class androidx.car.app.model.signin.SignInTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#Builder(androidx.car.app.model.signin.SignInTemplate.SignInMethod):
-    Removed constructor androidx.car.app.model.signin.SignInTemplate.Builder(androidx.car.app.model.signin.SignInTemplate.SignInMethod) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#Builder(androidx.car.app.model.signin.SignInTemplate.SignInMethod) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder(androidx.car.app.model.signin.SignInTemplate.SignInMethod arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#addAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.addAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#addAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder.addAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#build():
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setAdditionalText(CharSequence):
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.setAdditionalText(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setAdditionalText(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder.setAdditionalText(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setInstructions(CharSequence):
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.setInstructions(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setInstructions(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder.setInstructions(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.model.signin.SignInTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.model.signin.SignInTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.model.signin.SignInTemplate.SignInMethod:
-    Removed class androidx.car.app.model.signin.SignInTemplate.SignInMethod from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination:
-    Removed class androidx.car.app.navigation.model.Destination from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination#getAddress():
-    Removed method androidx.car.app.navigation.model.Destination.getAddress() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination#getImage():
-    Removed method androidx.car.app.navigation.model.Destination.getImage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination#getName():
-    Removed method androidx.car.app.navigation.model.Destination.getName() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder:
-    Removed class androidx.car.app.navigation.model.Destination.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.Destination.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#build():
-    Removed method androidx.car.app.navigation.model.Destination.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#setAddress(CharSequence):
-    Removed method androidx.car.app.navigation.model.Destination.Builder.setAddress(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#setAddress(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Destination.Builder.setAddress(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#setImage(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.navigation.model.Destination.Builder.setImage(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#setImage(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Destination.Builder.setImage(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#setName(CharSequence):
-    Removed method androidx.car.app.navigation.model.Destination.Builder.setName(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Destination.Builder#setName(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Destination.Builder.setName(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Lane:
-    Removed class androidx.car.app.navigation.model.Lane from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Lane#getDirections():
-    Removed method androidx.car.app.navigation.model.Lane.getDirections() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Lane.Builder:
-    Removed class androidx.car.app.navigation.model.Lane.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Lane.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.Lane.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Lane.Builder#addDirection(androidx.car.app.navigation.model.LaneDirection):
-    Removed method androidx.car.app.navigation.model.Lane.Builder.addDirection(androidx.car.app.navigation.model.LaneDirection) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Lane.Builder#addDirection(androidx.car.app.navigation.model.LaneDirection) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Lane.Builder.addDirection(androidx.car.app.navigation.model.LaneDirection arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Lane.Builder#build():
-    Removed method androidx.car.app.navigation.model.Lane.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection:
-    Removed class androidx.car.app.navigation.model.LaneDirection from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_NORMAL_LEFT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_NORMAL_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_NORMAL_RIGHT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_NORMAL_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_SHARP_LEFT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_SHARP_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_SHARP_RIGHT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_SHARP_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_SLIGHT_LEFT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_SLIGHT_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_SLIGHT_RIGHT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_SLIGHT_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_STRAIGHT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_STRAIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_UNKNOWN:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_UNKNOWN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_U_TURN_LEFT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_U_TURN_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#SHAPE_U_TURN_RIGHT:
-    Removed field androidx.car.app.navigation.model.LaneDirection.SHAPE_U_TURN_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#create(int, boolean):
-    Removed method androidx.car.app.navigation.model.LaneDirection.create(int,boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#create(int, boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.LaneDirection.create(int arg1, boolean arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#create(int, boolean) parameter #1:
-    Removed parameter arg2 in androidx.car.app.navigation.model.LaneDirection.create(int arg1, boolean arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#getShape():
-    Removed method androidx.car.app.navigation.model.LaneDirection.getShape() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.LaneDirection#isRecommended():
-    Removed method androidx.car.app.navigation.model.LaneDirection.isRecommended() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver:
-    Removed class androidx.car.app.navigation.model.Maneuver from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_DEPART:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_DEPART from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_DESTINATION:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_DESTINATION from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_DESTINATION_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_DESTINATION_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_DESTINATION_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_DESTINATION_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_DESTINATION_STRAIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_DESTINATION_STRAIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FERRY_BOAT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FERRY_BOAT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FERRY_BOAT_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FERRY_BOAT_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FERRY_BOAT_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FERRY_BOAT_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FERRY_TRAIN:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FERRY_TRAIN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FERRY_TRAIN_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FERRY_TRAIN_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FERRY_TRAIN_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FERRY_TRAIN_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FORK_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FORK_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_FORK_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_FORK_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_KEEP_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_KEEP_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_KEEP_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_KEEP_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_MERGE_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_MERGE_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_MERGE_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_MERGE_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_MERGE_SIDE_UNSPECIFIED:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_MERGE_SIDE_UNSPECIFIED from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_NAME_CHANGE:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_NAME_CHANGE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_OFF_RAMP_NORMAL_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_OFF_RAMP_NORMAL_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_OFF_RAMP_NORMAL_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_OFF_RAMP_NORMAL_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_OFF_RAMP_SLIGHT_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_OFF_RAMP_SLIGHT_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_OFF_RAMP_SLIGHT_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_OFF_RAMP_SLIGHT_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_NORMAL_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_NORMAL_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_NORMAL_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_NORMAL_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_SHARP_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_SHARP_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_SHARP_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_SHARP_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_SLIGHT_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_SLIGHT_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_SLIGHT_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_SLIGHT_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_U_TURN_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_U_TURN_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ON_RAMP_U_TURN_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ON_RAMP_U_TURN_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW_WITH_ANGLE:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CW_WITH_ANGLE from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_ENTER_CCW:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_CCW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_ENTER_CW:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_CW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_EXIT_CCW:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_EXIT_CCW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_ROUNDABOUT_EXIT_CW:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_EXIT_CW from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_STRAIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_STRAIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_TURN_NORMAL_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_TURN_NORMAL_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_TURN_NORMAL_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_TURN_NORMAL_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_TURN_SHARP_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_TURN_SHARP_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_TURN_SHARP_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_TURN_SHARP_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_TURN_SLIGHT_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_TURN_SLIGHT_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_TURN_SLIGHT_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_TURN_SLIGHT_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_UNKNOWN:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_UNKNOWN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_U_TURN_LEFT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_U_TURN_LEFT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#TYPE_U_TURN_RIGHT:
-    Removed field androidx.car.app.navigation.model.Maneuver.TYPE_U_TURN_RIGHT from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#getIcon():
-    Removed method androidx.car.app.navigation.model.Maneuver.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#getRoundaboutExitAngle():
-    Removed method androidx.car.app.navigation.model.Maneuver.getRoundaboutExitAngle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#getRoundaboutExitNumber():
-    Removed method androidx.car.app.navigation.model.Maneuver.getRoundaboutExitNumber() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver#getType():
-    Removed method androidx.car.app.navigation.model.Maneuver.getType() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder:
-    Removed class androidx.car.app.navigation.model.Maneuver.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#Builder(int):
-    Removed constructor androidx.car.app.navigation.model.Maneuver.Builder(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#Builder(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Maneuver.Builder(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#build():
-    Removed method androidx.car.app.navigation.model.Maneuver.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#setIcon(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.navigation.model.Maneuver.Builder.setIcon(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#setIcon(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Maneuver.Builder.setIcon(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#setRoundaboutExitAngle(int):
-    Removed method androidx.car.app.navigation.model.Maneuver.Builder.setRoundaboutExitAngle(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#setRoundaboutExitAngle(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Maneuver.Builder.setRoundaboutExitAngle(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#setRoundaboutExitNumber(int):
-    Removed method androidx.car.app.navigation.model.Maneuver.Builder.setRoundaboutExitNumber(int) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Maneuver.Builder#setRoundaboutExitNumber(int) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Maneuver.Builder.setRoundaboutExitNumber(int arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController:
-    Removed class androidx.car.app.navigation.model.MapController from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController#getMapActionStrip():
-    Removed method androidx.car.app.navigation.model.MapController.getMapActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController#getPanModeDelegate():
-    Removed method androidx.car.app.navigation.model.MapController.getPanModeDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController.Builder:
-    Removed class androidx.car.app.navigation.model.MapController.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.MapController.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController.Builder#build():
-    Removed method androidx.car.app.navigation.model.MapController.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.MapController.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MapController.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener):
-    Removed method androidx.car.app.navigation.model.MapController.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapController.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MapController.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate:
-    Removed class androidx.car.app.navigation.model.MapTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate#getActionStrip():
-    Removed method androidx.car.app.navigation.model.MapTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate#getHeader():
-    Removed method androidx.car.app.navigation.model.MapTemplate.getHeader() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate#getItemList():
-    Removed method androidx.car.app.navigation.model.MapTemplate.getItemList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate#getMapController():
-    Removed method androidx.car.app.navigation.model.MapTemplate.getMapController() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate#getPane():
-    Removed method androidx.car.app.navigation.model.MapTemplate.getPane() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder:
-    Removed class androidx.car.app.navigation.model.MapTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.MapTemplate.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#build():
-    Removed method androidx.car.app.navigation.model.MapTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.MapTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MapTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setHeader(androidx.car.app.model.Header):
-    Removed method androidx.car.app.navigation.model.MapTemplate.Builder.setHeader(androidx.car.app.model.Header) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setHeader(androidx.car.app.model.Header) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MapTemplate.Builder.setHeader(androidx.car.app.model.Header arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setItemList(androidx.car.app.model.ItemList):
-    Removed method androidx.car.app.navigation.model.MapTemplate.Builder.setItemList(androidx.car.app.model.ItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setItemList(androidx.car.app.model.ItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MapTemplate.Builder.setItemList(androidx.car.app.model.ItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setMapController(androidx.car.app.navigation.model.MapController):
-    Removed method androidx.car.app.navigation.model.MapTemplate.Builder.setMapController(androidx.car.app.navigation.model.MapController) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setMapController(androidx.car.app.navigation.model.MapController) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MapTemplate.Builder.setMapController(androidx.car.app.navigation.model.MapController arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setPane(androidx.car.app.model.Pane):
-    Removed method androidx.car.app.navigation.model.MapTemplate.Builder.setPane(androidx.car.app.model.Pane) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MapTemplate.Builder#setPane(androidx.car.app.model.Pane) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MapTemplate.Builder.setPane(androidx.car.app.model.Pane arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo:
-    Removed class androidx.car.app.navigation.model.MessageInfo from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo#getImage():
-    Removed method androidx.car.app.navigation.model.MessageInfo.getImage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo#getText():
-    Removed method androidx.car.app.navigation.model.MessageInfo.getText() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo#getTitle():
-    Removed method androidx.car.app.navigation.model.MessageInfo.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder:
-    Removed class androidx.car.app.navigation.model.MessageInfo.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#Builder(CharSequence):
-    Removed constructor androidx.car.app.navigation.model.MessageInfo.Builder(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#Builder(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MessageInfo.Builder(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#Builder(androidx.car.app.model.CarText):
-    Removed constructor androidx.car.app.navigation.model.MessageInfo.Builder(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#Builder(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MessageInfo.Builder(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#build():
-    Removed method androidx.car.app.navigation.model.MessageInfo.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setImage(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.navigation.model.MessageInfo.Builder.setImage(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setImage(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MessageInfo.Builder.setImage(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setText(CharSequence):
-    Removed method androidx.car.app.navigation.model.MessageInfo.Builder.setText(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setText(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MessageInfo.Builder.setText(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setText(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.navigation.model.MessageInfo.Builder.setText(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setText(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MessageInfo.Builder.setText(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.navigation.model.MessageInfo.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.MessageInfo.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.MessageInfo.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate:
-    Removed class androidx.car.app.navigation.model.NavigationTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate#getActionStrip():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate#getBackgroundColor():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.getBackgroundColor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate#getDestinationTravelEstimate():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.getDestinationTravelEstimate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate#getMapActionStrip():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.getMapActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate#getNavigationInfo():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.getNavigationInfo() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate#getPanModeDelegate():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.getPanModeDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate#getPanModeToggle():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.getPanModeToggle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder:
-    Removed class androidx.car.app.navigation.model.NavigationTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.NavigationTemplate.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#build():
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.NavigationTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setBackgroundColor(androidx.car.app.model.CarColor):
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.Builder.setBackgroundColor(androidx.car.app.model.CarColor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setBackgroundColor(androidx.car.app.model.CarColor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.NavigationTemplate.Builder.setBackgroundColor(androidx.car.app.model.CarColor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setDestinationTravelEstimate(androidx.car.app.navigation.model.TravelEstimate):
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.Builder.setDestinationTravelEstimate(androidx.car.app.navigation.model.TravelEstimate) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setDestinationTravelEstimate(androidx.car.app.navigation.model.TravelEstimate) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.NavigationTemplate.Builder.setDestinationTravelEstimate(androidx.car.app.navigation.model.TravelEstimate arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.NavigationTemplate.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo):
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.Builder.setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.NavigationTemplate.Builder.setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener):
-    Removed method androidx.car.app.navigation.model.NavigationTemplate.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.NavigationTemplate.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo:
-    Removed class androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate:
-    Removed class androidx.car.app.navigation.model.PlaceListNavigationTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getActionStrip():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getHeader():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getHeader() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getHeaderAction():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getItemList():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getItemList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getMapActionStrip():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getMapActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getOnContentRefreshDelegate():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getOnContentRefreshDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getPanModeDelegate():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getPanModeDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#getTitle():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate#isLoading():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder:
-    Removed class androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#build():
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setHeader(androidx.car.app.model.Header):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setHeader(androidx.car.app.model.Header) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setHeader(androidx.car.app.model.Header) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setHeader(androidx.car.app.model.Header arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setItemList(androidx.car.app.model.ItemList):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setItemList(androidx.car.app.model.ItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setItemList(androidx.car.app.model.ItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setItemList(androidx.car.app.model.ItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setOnContentRefreshListener(androidx.car.app.model.OnContentRefreshListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setTitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setTitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder#setTitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.PlaceListNavigationTemplate.Builder.setTitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate:
-    Removed class androidx.car.app.navigation.model.RoutePreviewNavigationTemplate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getActionStrip():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getHeader():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getHeader() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getHeaderAction():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getHeaderAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getItemList():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getItemList() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getMapActionStrip():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getMapActionStrip() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getNavigateAction():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getNavigateAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getPanModeDelegate():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getPanModeDelegate() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#getTitle():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate#isLoading():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder:
-    Removed class androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#build():
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setHeader(androidx.car.app.model.Header):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setHeader(androidx.car.app.model.Header) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setHeader(androidx.car.app.model.Header) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setHeader(androidx.car.app.model.Header arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setHeaderAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setHeaderAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setHeaderAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setHeaderAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setItemList(androidx.car.app.model.ItemList):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setItemList(androidx.car.app.model.ItemList) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setItemList(androidx.car.app.model.ItemList) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setItemList(androidx.car.app.model.ItemList arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setLoading(boolean):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setMapActionStrip(androidx.car.app.model.ActionStrip) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setMapActionStrip(androidx.car.app.model.ActionStrip arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setNavigateAction(androidx.car.app.model.Action):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setNavigateAction(androidx.car.app.model.Action) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setNavigateAction(androidx.car.app.model.Action) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setNavigateAction(androidx.car.app.model.Action arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setPanModeListener(androidx.car.app.navigation.model.PanModeListener) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setPanModeListener(androidx.car.app.navigation.model.PanModeListener arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setTitle(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setTitle(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder#setTitle(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutePreviewNavigationTemplate.Builder.setTitle(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo:
-    Removed class androidx.car.app.navigation.model.RoutingInfo from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo#getCurrentDistance():
-    Removed method androidx.car.app.navigation.model.RoutingInfo.getCurrentDistance() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo#getCurrentStep():
-    Removed method androidx.car.app.navigation.model.RoutingInfo.getCurrentStep() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo#getJunctionImage():
-    Removed method androidx.car.app.navigation.model.RoutingInfo.getJunctionImage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo#getNextStep():
-    Removed method androidx.car.app.navigation.model.RoutingInfo.getNextStep() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo#isLoading():
-    Removed method androidx.car.app.navigation.model.RoutingInfo.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder:
-    Removed class androidx.car.app.navigation.model.RoutingInfo.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.RoutingInfo.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#build():
-    Removed method androidx.car.app.navigation.model.RoutingInfo.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setCurrentStep(androidx.car.app.navigation.model.Step, androidx.car.app.model.Distance):
-    Removed method androidx.car.app.navigation.model.RoutingInfo.Builder.setCurrentStep(androidx.car.app.navigation.model.Step,androidx.car.app.model.Distance) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setCurrentStep(androidx.car.app.navigation.model.Step, androidx.car.app.model.Distance) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutingInfo.Builder.setCurrentStep(androidx.car.app.navigation.model.Step arg1, androidx.car.app.model.Distance arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setCurrentStep(androidx.car.app.navigation.model.Step, androidx.car.app.model.Distance) parameter #1:
-    Removed parameter arg2 in androidx.car.app.navigation.model.RoutingInfo.Builder.setCurrentStep(androidx.car.app.navigation.model.Step arg1, androidx.car.app.model.Distance arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setJunctionImage(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.navigation.model.RoutingInfo.Builder.setJunctionImage(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setJunctionImage(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutingInfo.Builder.setJunctionImage(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setLoading(boolean):
-    Removed method androidx.car.app.navigation.model.RoutingInfo.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutingInfo.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setNextStep(androidx.car.app.navigation.model.Step):
-    Removed method androidx.car.app.navigation.model.RoutingInfo.Builder.setNextStep(androidx.car.app.navigation.model.Step) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.RoutingInfo.Builder#setNextStep(androidx.car.app.navigation.model.Step) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.RoutingInfo.Builder.setNextStep(androidx.car.app.navigation.model.Step arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step:
-    Removed class androidx.car.app.navigation.model.Step from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step#getCue():
-    Removed method androidx.car.app.navigation.model.Step.getCue() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step#getLanes():
-    Removed method androidx.car.app.navigation.model.Step.getLanes() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step#getLanesImage():
-    Removed method androidx.car.app.navigation.model.Step.getLanesImage() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step#getManeuver():
-    Removed method androidx.car.app.navigation.model.Step.getManeuver() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step#getRoad():
-    Removed method androidx.car.app.navigation.model.Step.getRoad() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder:
-    Removed class androidx.car.app.navigation.model.Step.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.Step.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#Builder(CharSequence):
-    Removed constructor androidx.car.app.navigation.model.Step.Builder(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#Builder(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Step.Builder(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#Builder(androidx.car.app.model.CarText):
-    Removed constructor androidx.car.app.navigation.model.Step.Builder(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#Builder(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Step.Builder(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#addLane(androidx.car.app.navigation.model.Lane):
-    Removed method androidx.car.app.navigation.model.Step.Builder.addLane(androidx.car.app.navigation.model.Lane) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#addLane(androidx.car.app.navigation.model.Lane) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Step.Builder.addLane(androidx.car.app.navigation.model.Lane arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#build():
-    Removed method androidx.car.app.navigation.model.Step.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setCue(CharSequence):
-    Removed method androidx.car.app.navigation.model.Step.Builder.setCue(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setCue(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Step.Builder.setCue(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setLanesImage(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.navigation.model.Step.Builder.setLanesImage(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setLanesImage(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Step.Builder.setLanesImage(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setManeuver(androidx.car.app.navigation.model.Maneuver):
-    Removed method androidx.car.app.navigation.model.Step.Builder.setManeuver(androidx.car.app.navigation.model.Maneuver) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setManeuver(androidx.car.app.navigation.model.Maneuver) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Step.Builder.setManeuver(androidx.car.app.navigation.model.Maneuver arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setRoad(CharSequence):
-    Removed method androidx.car.app.navigation.model.Step.Builder.setRoad(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Step.Builder#setRoad(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Step.Builder.setRoad(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate:
-    Removed class androidx.car.app.navigation.model.TravelEstimate from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#REMAINING_TIME_UNKNOWN:
-    Removed field androidx.car.app.navigation.model.TravelEstimate.REMAINING_TIME_UNKNOWN from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#getArrivalTimeAtDestination():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.getArrivalTimeAtDestination() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#getRemainingDistance():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.getRemainingDistance() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#getRemainingDistanceColor():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.getRemainingDistanceColor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#getRemainingTimeColor():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.getRemainingTimeColor() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#getRemainingTimeSeconds():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.getRemainingTimeSeconds() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#getTripIcon():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.getTripIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate#getTripText():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.getTripText() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder:
-    Removed class androidx.car.app.navigation.model.TravelEstimate.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#Builder(androidx.car.app.model.Distance, androidx.car.app.model.DateTimeWithZone):
-    Removed constructor androidx.car.app.navigation.model.TravelEstimate.Builder(androidx.car.app.model.Distance,androidx.car.app.model.DateTimeWithZone) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#Builder(androidx.car.app.model.Distance, androidx.car.app.model.DateTimeWithZone) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder(androidx.car.app.model.Distance arg1, androidx.car.app.model.DateTimeWithZone arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#Builder(androidx.car.app.model.Distance, androidx.car.app.model.DateTimeWithZone) parameter #1:
-    Removed parameter arg2 in androidx.car.app.navigation.model.TravelEstimate.Builder(androidx.car.app.model.Distance arg1, androidx.car.app.model.DateTimeWithZone arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#Builder(androidx.car.app.model.Distance, java.time.ZonedDateTime):
-    Removed constructor androidx.car.app.navigation.model.TravelEstimate.Builder(androidx.car.app.model.Distance,java.time.ZonedDateTime) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#Builder(androidx.car.app.model.Distance, java.time.ZonedDateTime) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder(androidx.car.app.model.Distance arg1, java.time.ZonedDateTime arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#Builder(androidx.car.app.model.Distance, java.time.ZonedDateTime) parameter #1:
-    Removed parameter arg2 in androidx.car.app.navigation.model.TravelEstimate.Builder(androidx.car.app.model.Distance arg1, java.time.ZonedDateTime arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#build():
-    Removed method androidx.car.app.navigation.model.TravelEstimate.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingDistanceColor(androidx.car.app.model.CarColor):
-    Removed method androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingDistanceColor(androidx.car.app.model.CarColor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingDistanceColor(androidx.car.app.model.CarColor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingDistanceColor(androidx.car.app.model.CarColor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingTime(java.time.Duration):
-    Removed method androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingTime(java.time.Duration) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingTime(java.time.Duration) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingTime(java.time.Duration arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingTimeColor(androidx.car.app.model.CarColor):
-    Removed method androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingTimeColor(androidx.car.app.model.CarColor) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingTimeColor(androidx.car.app.model.CarColor) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingTimeColor(androidx.car.app.model.CarColor arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingTimeSeconds(long):
-    Removed method androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingTimeSeconds(long) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setRemainingTimeSeconds(long) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder.setRemainingTimeSeconds(long arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setTripIcon(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.navigation.model.TravelEstimate.Builder.setTripIcon(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setTripIcon(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder.setTripIcon(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setTripText(androidx.car.app.model.CarText):
-    Removed method androidx.car.app.navigation.model.TravelEstimate.Builder.setTripText(androidx.car.app.model.CarText) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.TravelEstimate.Builder#setTripText(androidx.car.app.model.CarText) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.TravelEstimate.Builder.setTripText(androidx.car.app.model.CarText arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip:
-    Removed class androidx.car.app.navigation.model.Trip from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip#getCurrentRoad():
-    Removed method androidx.car.app.navigation.model.Trip.getCurrentRoad() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip#getDestinationTravelEstimates():
-    Removed method androidx.car.app.navigation.model.Trip.getDestinationTravelEstimates() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip#getDestinations():
-    Removed method androidx.car.app.navigation.model.Trip.getDestinations() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip#getStepTravelEstimates():
-    Removed method androidx.car.app.navigation.model.Trip.getStepTravelEstimates() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip#getSteps():
-    Removed method androidx.car.app.navigation.model.Trip.getSteps() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip#isLoading():
-    Removed method androidx.car.app.navigation.model.Trip.isLoading() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder:
-    Removed class androidx.car.app.navigation.model.Trip.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#Builder():
-    Removed constructor androidx.car.app.navigation.model.Trip.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#addDestination(androidx.car.app.navigation.model.Destination, androidx.car.app.navigation.model.TravelEstimate):
-    Removed method androidx.car.app.navigation.model.Trip.Builder.addDestination(androidx.car.app.navigation.model.Destination,androidx.car.app.navigation.model.TravelEstimate) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#addDestination(androidx.car.app.navigation.model.Destination, androidx.car.app.navigation.model.TravelEstimate) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Trip.Builder.addDestination(androidx.car.app.navigation.model.Destination arg1, androidx.car.app.navigation.model.TravelEstimate arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#addDestination(androidx.car.app.navigation.model.Destination, androidx.car.app.navigation.model.TravelEstimate) parameter #1:
-    Removed parameter arg2 in androidx.car.app.navigation.model.Trip.Builder.addDestination(androidx.car.app.navigation.model.Destination arg1, androidx.car.app.navigation.model.TravelEstimate arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#addStep(androidx.car.app.navigation.model.Step, androidx.car.app.navigation.model.TravelEstimate):
-    Removed method androidx.car.app.navigation.model.Trip.Builder.addStep(androidx.car.app.navigation.model.Step,androidx.car.app.navigation.model.TravelEstimate) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#addStep(androidx.car.app.navigation.model.Step, androidx.car.app.navigation.model.TravelEstimate) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Trip.Builder.addStep(androidx.car.app.navigation.model.Step arg1, androidx.car.app.navigation.model.TravelEstimate arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#addStep(androidx.car.app.navigation.model.Step, androidx.car.app.navigation.model.TravelEstimate) parameter #1:
-    Removed parameter arg2 in androidx.car.app.navigation.model.Trip.Builder.addStep(androidx.car.app.navigation.model.Step arg1, androidx.car.app.navigation.model.TravelEstimate arg2) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#build():
-    Removed method androidx.car.app.navigation.model.Trip.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#setCurrentRoad(CharSequence):
-    Removed method androidx.car.app.navigation.model.Trip.Builder.setCurrentRoad(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#setCurrentRoad(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Trip.Builder.setCurrentRoad(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#setLoading(boolean):
-    Removed method androidx.car.app.navigation.model.Trip.Builder.setLoading(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.navigation.model.Trip.Builder#setLoading(boolean) parameter #0:
-    Removed parameter arg1 in androidx.car.app.navigation.model.Trip.Builder.setLoading(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion:
-    Removed class androidx.car.app.suggestion.model.Suggestion from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion#getAction():
-    Removed method androidx.car.app.suggestion.model.Suggestion.getAction() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion#getIcon():
-    Removed method androidx.car.app.suggestion.model.Suggestion.getIcon() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion#getIdentifier():
-    Removed method androidx.car.app.suggestion.model.Suggestion.getIdentifier() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion#getSubtitle():
-    Removed method androidx.car.app.suggestion.model.Suggestion.getSubtitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion#getTitle():
-    Removed method androidx.car.app.suggestion.model.Suggestion.getTitle() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder:
-    Removed class androidx.car.app.suggestion.model.Suggestion.Builder from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#Builder():
-    Removed constructor androidx.car.app.suggestion.model.Suggestion.Builder() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#build():
-    Removed method androidx.car.app.suggestion.model.Suggestion.Builder.build() from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setAction(android.app.PendingIntent):
-    Removed method androidx.car.app.suggestion.model.Suggestion.Builder.setAction(android.app.PendingIntent) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setAction(android.app.PendingIntent) parameter #0:
-    Removed parameter arg1 in androidx.car.app.suggestion.model.Suggestion.Builder.setAction(android.app.PendingIntent arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setIcon(androidx.car.app.model.CarIcon):
-    Removed method androidx.car.app.suggestion.model.Suggestion.Builder.setIcon(androidx.car.app.model.CarIcon) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setIcon(androidx.car.app.model.CarIcon) parameter #0:
-    Removed parameter arg1 in androidx.car.app.suggestion.model.Suggestion.Builder.setIcon(androidx.car.app.model.CarIcon arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setIdentifier(String):
-    Removed method androidx.car.app.suggestion.model.Suggestion.Builder.setIdentifier(String) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setIdentifier(String) parameter #0:
-    Removed parameter arg1 in androidx.car.app.suggestion.model.Suggestion.Builder.setIdentifier(String arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setSubtitle(CharSequence):
-    Removed method androidx.car.app.suggestion.model.Suggestion.Builder.setSubtitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setSubtitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.suggestion.model.Suggestion.Builder.setSubtitle(CharSequence arg1) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setTitle(CharSequence):
-    Removed method androidx.car.app.suggestion.model.Suggestion.Builder.setTitle(CharSequence) from compatibility checked API surface
-BecameUnchecked: androidx.car.app.suggestion.model.Suggestion.Builder#setTitle(CharSequence) parameter #0:
-    Removed parameter arg1 in androidx.car.app.suggestion.model.Suggestion.Builder.setTitle(CharSequence arg1) from compatibility checked API surface
diff --git a/car/app/app/build.gradle b/car/app/app/build.gradle
index c8d979c..c223af7 100644
--- a/car/app/app/build.gradle
+++ b/car/app/app/build.gradle
@@ -131,7 +131,6 @@
                 '--source-path',
                 sourceDirs.filter { it.exists() }.join(File.pathSeparator),
                 '--format=v4',
-                '--output-kotlin-nulls=yes',
                 '--quiet'
         ]
         standardArgs.addAll(additionalArgs)
diff --git a/car/app/app/lint-baseline.xml b/car/app/app/lint-baseline.xml
index 081db79..060b93f 100644
--- a/car/app/app/lint-baseline.xml
+++ b/car/app/app/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="MissingPermission"
@@ -380,6 +380,24 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.car.app`)"
+        errorLine1="        checkState(!mMessages.isEmpty(), &quot;Message list cannot be empty.&quot;);"
+        errorLine2="        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/car/app/messaging/model/ConversationItem.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.car.app`)"
+        errorLine1="        checkState(!mMessages.isEmpty(), &quot;Message list cannot be empty.&quot;);"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/car/app/messaging/model/ConversationItem.java"/>
+    </issue>
+
+    <issue
         id="UnsafeOptInUsageError"
         message="This declaration is opt-in and its usage should be marked with `@androidx.car.app.annotations.ExperimentalCarApi` or `@OptIn(markerClass = androidx.car.app.annotations.ExperimentalCarApi.class)`"
         errorLine1="            } else if (rowObj instanceof ConversationItem) {"
diff --git a/collection/buildSrc b/collection/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/collection/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/collection/collection-ktx/api/current.ignore b/collection/collection-ktx/api/current.ignore
deleted file mode 100644
index fba439e..0000000
--- a/collection/collection-ktx/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.collection:
-    Removed package androidx.collection
diff --git a/collection/collection-ktx/api/restricted_current.ignore b/collection/collection-ktx/api/restricted_current.ignore
deleted file mode 100644
index fba439e..0000000
--- a/collection/collection-ktx/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedPackage: androidx.collection:
-    Removed package androidx.collection
diff --git a/collection/collection/api/current.ignore b/collection/collection/api/current.ignore
deleted file mode 100644
index 3ee4c0b..0000000
--- a/collection/collection/api/current.ignore
+++ /dev/null
@@ -1,33 +0,0 @@
-// Baseline format: 1.0
-ChangedAbstract: androidx.collection.ArraySet#size():
-    Method androidx.collection.ArraySet.size has changed 'abstract' qualifier
-
-
-ChangedType: androidx.collection.ArraySet#iterator():
-    Method androidx.collection.ArraySet.iterator has changed return type from java.util.Iterator<E!> to java.util.Iterator<E>
-ChangedType: androidx.collection.LongSparseArray#clone():
-    Method androidx.collection.LongSparseArray.clone has changed return type from androidx.collection.LongSparseArray<E!> to androidx.collection.LongSparseArray<E>
-ChangedType: androidx.collection.LruCache#snapshot():
-    Method androidx.collection.LruCache.snapshot has changed return type from java.util.Map<K!,V!> to java.util.Map<K,V>
-ChangedType: androidx.collection.SparseArrayCompat#clone():
-    Method androidx.collection.SparseArrayCompat.clone has changed return type from androidx.collection.SparseArrayCompat<E!> to androidx.collection.SparseArrayCompat<E>
-
-
-InvalidNullConversion: androidx.collection.ArraySet#add(E) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter element in androidx.collection.ArraySet.add(E element)
-InvalidNullConversion: androidx.collection.ArraySet#contains(E) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter element in androidx.collection.ArraySet.contains(E element)
-InvalidNullConversion: androidx.collection.ArraySet#remove(E) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter element in androidx.collection.ArraySet.remove(E element)
-InvalidNullConversion: androidx.collection.SimpleArrayMap#containsKey(K) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter key in androidx.collection.SimpleArrayMap.containsKey(K key)
-InvalidNullConversion: androidx.collection.SimpleArrayMap#indexOfKey(K) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter key in androidx.collection.SimpleArrayMap.indexOfKey(K key)
-
-
-RemovedMethod: androidx.collection.ArraySet#ArraySet(androidx.collection.ArraySet<E>):
-    Removed constructor androidx.collection.ArraySet(androidx.collection.ArraySet<E>)
-RemovedMethod: androidx.collection.ArraySet#ArraySet(java.util.Collection<E>):
-    Removed constructor androidx.collection.ArraySet(java.util.Collection<E>)
-RemovedMethod: androidx.collection.SimpleArrayMap#SimpleArrayMap(androidx.collection.SimpleArrayMap<K,V>):
-    Removed constructor androidx.collection.SimpleArrayMap(androidx.collection.SimpleArrayMap<K,V>)
diff --git a/collection/collection/api/current.txt b/collection/collection/api/current.txt
index 4261c54..16b4531 100644
--- a/collection/collection/api/current.txt
+++ b/collection/collection/api/current.txt
@@ -133,7 +133,16 @@
   }
 
   public final class FloatListKt {
+    method public static androidx.collection.FloatList emptyFloatList();
+    method public static androidx.collection.FloatList floatListOf();
+    method public static androidx.collection.FloatList floatListOf(float element1);
+    method public static androidx.collection.FloatList floatListOf(float element1, float element2);
+    method public static androidx.collection.FloatList floatListOf(float element1, float element2, float element3);
+    method public static androidx.collection.FloatList floatListOf(float... elements);
     method public static inline androidx.collection.MutableFloatList mutableFloatListOf();
+    method public static androidx.collection.MutableFloatList mutableFloatListOf(float element1);
+    method public static androidx.collection.MutableFloatList mutableFloatListOf(float element1, float element2);
+    method public static androidx.collection.MutableFloatList mutableFloatListOf(float element1, float element2, float element3);
     method public static inline androidx.collection.MutableFloatList mutableFloatListOf(float... elements);
   }
 
@@ -158,7 +167,15 @@
 
   public final class FloatSetKt {
     method public static androidx.collection.FloatSet emptyFloatSet();
+    method public static androidx.collection.FloatSet floatSetOf();
+    method public static androidx.collection.FloatSet floatSetOf(float element1);
+    method public static androidx.collection.FloatSet floatSetOf(float element1, float element2);
+    method public static androidx.collection.FloatSet floatSetOf(float element1, float element2, float element3);
+    method public static androidx.collection.FloatSet floatSetOf(float... elements);
     method public static androidx.collection.MutableFloatSet mutableFloatSetOf();
+    method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float element1);
+    method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float element1, float element2);
+    method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float element1, float element2, float element3);
     method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float... elements);
   }
 
@@ -201,7 +218,16 @@
   }
 
   public final class IntListKt {
+    method public static androidx.collection.IntList emptyIntList();
+    method public static androidx.collection.IntList intListOf();
+    method public static androidx.collection.IntList intListOf(int element1);
+    method public static androidx.collection.IntList intListOf(int element1, int element2);
+    method public static androidx.collection.IntList intListOf(int element1, int element2, int element3);
+    method public static androidx.collection.IntList intListOf(int... elements);
     method public static inline androidx.collection.MutableIntList mutableIntListOf();
+    method public static androidx.collection.MutableIntList mutableIntListOf(int element1);
+    method public static androidx.collection.MutableIntList mutableIntListOf(int element1, int element2);
+    method public static androidx.collection.MutableIntList mutableIntListOf(int element1, int element2, int element3);
     method public static inline androidx.collection.MutableIntList mutableIntListOf(int... elements);
   }
 
@@ -226,7 +252,15 @@
 
   public final class IntSetKt {
     method public static androidx.collection.IntSet emptyIntSet();
+    method public static androidx.collection.IntSet intSetOf();
+    method public static androidx.collection.IntSet intSetOf(int element1);
+    method public static androidx.collection.IntSet intSetOf(int element1, int element2);
+    method public static androidx.collection.IntSet intSetOf(int element1, int element2, int element3);
+    method public static androidx.collection.IntSet intSetOf(int... elements);
     method public static androidx.collection.MutableIntSet mutableIntSetOf();
+    method public static androidx.collection.MutableIntSet mutableIntSetOf(int element1);
+    method public static androidx.collection.MutableIntSet mutableIntSetOf(int element1, int element2);
+    method public static androidx.collection.MutableIntSet mutableIntSetOf(int element1, int element2, int element3);
     method public static androidx.collection.MutableIntSet mutableIntSetOf(int... elements);
   }
 
@@ -269,7 +303,16 @@
   }
 
   public final class LongListKt {
+    method public static androidx.collection.LongList emptyLongList();
+    method public static androidx.collection.LongList longListOf();
+    method public static androidx.collection.LongList longListOf(long element1);
+    method public static androidx.collection.LongList longListOf(long element1, long element2);
+    method public static androidx.collection.LongList longListOf(long element1, long element2, long element3);
+    method public static androidx.collection.LongList longListOf(long... elements);
     method public static inline androidx.collection.MutableLongList mutableLongListOf();
+    method public static androidx.collection.MutableLongList mutableLongListOf(long element1);
+    method public static androidx.collection.MutableLongList mutableLongListOf(long element1, long element2);
+    method public static androidx.collection.MutableLongList mutableLongListOf(long element1, long element2, long element3);
     method public static inline androidx.collection.MutableLongList mutableLongListOf(long... elements);
   }
 
@@ -294,7 +337,15 @@
 
   public final class LongSetKt {
     method public static androidx.collection.LongSet emptyLongSet();
+    method public static androidx.collection.LongSet longSetOf();
+    method public static androidx.collection.LongSet longSetOf(long element1);
+    method public static androidx.collection.LongSet longSetOf(long element1, long element2);
+    method public static androidx.collection.LongSet longSetOf(long element1, long element2, long element3);
+    method public static androidx.collection.LongSet longSetOf(long... elements);
     method public static androidx.collection.MutableLongSet mutableLongSetOf();
+    method public static androidx.collection.MutableLongSet mutableLongSetOf(long element1);
+    method public static androidx.collection.MutableLongSet mutableLongSetOf(long element1, long element2);
+    method public static androidx.collection.MutableLongSet mutableLongSetOf(long element1, long element2, long element3);
     method public static androidx.collection.MutableLongSet mutableLongSetOf(long... elements);
   }
 
@@ -652,7 +703,15 @@
   public final class ScatterSetKt {
     method public static <E> androidx.collection.ScatterSet<E> emptyScatterSet();
     method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf();
+    method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E element1);
+    method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E element1, E element2);
+    method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E element1, E element2, E element3);
     method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E?... elements);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf();
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E element1);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E element1, E element2);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E element1, E element2, E element3);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E?... elements);
   }
 
   public class SimpleArrayMap<K, V> {
diff --git a/collection/collection/api/restricted_current.ignore b/collection/collection/api/restricted_current.ignore
deleted file mode 100644
index 3ee4c0b..0000000
--- a/collection/collection/api/restricted_current.ignore
+++ /dev/null
@@ -1,33 +0,0 @@
-// Baseline format: 1.0
-ChangedAbstract: androidx.collection.ArraySet#size():
-    Method androidx.collection.ArraySet.size has changed 'abstract' qualifier
-
-
-ChangedType: androidx.collection.ArraySet#iterator():
-    Method androidx.collection.ArraySet.iterator has changed return type from java.util.Iterator<E!> to java.util.Iterator<E>
-ChangedType: androidx.collection.LongSparseArray#clone():
-    Method androidx.collection.LongSparseArray.clone has changed return type from androidx.collection.LongSparseArray<E!> to androidx.collection.LongSparseArray<E>
-ChangedType: androidx.collection.LruCache#snapshot():
-    Method androidx.collection.LruCache.snapshot has changed return type from java.util.Map<K!,V!> to java.util.Map<K,V>
-ChangedType: androidx.collection.SparseArrayCompat#clone():
-    Method androidx.collection.SparseArrayCompat.clone has changed return type from androidx.collection.SparseArrayCompat<E!> to androidx.collection.SparseArrayCompat<E>
-
-
-InvalidNullConversion: androidx.collection.ArraySet#add(E) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter element in androidx.collection.ArraySet.add(E element)
-InvalidNullConversion: androidx.collection.ArraySet#contains(E) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter element in androidx.collection.ArraySet.contains(E element)
-InvalidNullConversion: androidx.collection.ArraySet#remove(E) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter element in androidx.collection.ArraySet.remove(E element)
-InvalidNullConversion: androidx.collection.SimpleArrayMap#containsKey(K) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter key in androidx.collection.SimpleArrayMap.containsKey(K key)
-InvalidNullConversion: androidx.collection.SimpleArrayMap#indexOfKey(K) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter key in androidx.collection.SimpleArrayMap.indexOfKey(K key)
-
-
-RemovedMethod: androidx.collection.ArraySet#ArraySet(androidx.collection.ArraySet<E>):
-    Removed constructor androidx.collection.ArraySet(androidx.collection.ArraySet<E>)
-RemovedMethod: androidx.collection.ArraySet#ArraySet(java.util.Collection<E>):
-    Removed constructor androidx.collection.ArraySet(java.util.Collection<E>)
-RemovedMethod: androidx.collection.SimpleArrayMap#SimpleArrayMap(androidx.collection.SimpleArrayMap<K,V>):
-    Removed constructor androidx.collection.SimpleArrayMap(androidx.collection.SimpleArrayMap<K,V>)
diff --git a/collection/collection/api/restricted_current.txt b/collection/collection/api/restricted_current.txt
index 7759811..29dd414 100644
--- a/collection/collection/api/restricted_current.txt
+++ b/collection/collection/api/restricted_current.txt
@@ -135,7 +135,16 @@
   }
 
   public final class FloatListKt {
+    method public static androidx.collection.FloatList emptyFloatList();
+    method public static androidx.collection.FloatList floatListOf();
+    method public static androidx.collection.FloatList floatListOf(float element1);
+    method public static androidx.collection.FloatList floatListOf(float element1, float element2);
+    method public static androidx.collection.FloatList floatListOf(float element1, float element2, float element3);
+    method public static androidx.collection.FloatList floatListOf(float... elements);
     method public static inline androidx.collection.MutableFloatList mutableFloatListOf();
+    method public static androidx.collection.MutableFloatList mutableFloatListOf(float element1);
+    method public static androidx.collection.MutableFloatList mutableFloatListOf(float element1, float element2);
+    method public static androidx.collection.MutableFloatList mutableFloatListOf(float element1, float element2, float element3);
     method public static inline androidx.collection.MutableFloatList mutableFloatListOf(float... elements);
   }
 
@@ -163,7 +172,15 @@
 
   public final class FloatSetKt {
     method public static androidx.collection.FloatSet emptyFloatSet();
+    method public static androidx.collection.FloatSet floatSetOf();
+    method public static androidx.collection.FloatSet floatSetOf(float element1);
+    method public static androidx.collection.FloatSet floatSetOf(float element1, float element2);
+    method public static androidx.collection.FloatSet floatSetOf(float element1, float element2, float element3);
+    method public static androidx.collection.FloatSet floatSetOf(float... elements);
     method public static androidx.collection.MutableFloatSet mutableFloatSetOf();
+    method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float element1);
+    method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float element1, float element2);
+    method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float element1, float element2, float element3);
     method public static androidx.collection.MutableFloatSet mutableFloatSetOf(float... elements);
   }
 
@@ -208,7 +225,16 @@
   }
 
   public final class IntListKt {
+    method public static androidx.collection.IntList emptyIntList();
+    method public static androidx.collection.IntList intListOf();
+    method public static androidx.collection.IntList intListOf(int element1);
+    method public static androidx.collection.IntList intListOf(int element1, int element2);
+    method public static androidx.collection.IntList intListOf(int element1, int element2, int element3);
+    method public static androidx.collection.IntList intListOf(int... elements);
     method public static inline androidx.collection.MutableIntList mutableIntListOf();
+    method public static androidx.collection.MutableIntList mutableIntListOf(int element1);
+    method public static androidx.collection.MutableIntList mutableIntListOf(int element1, int element2);
+    method public static androidx.collection.MutableIntList mutableIntListOf(int element1, int element2, int element3);
     method public static inline androidx.collection.MutableIntList mutableIntListOf(int... elements);
   }
 
@@ -236,7 +262,15 @@
 
   public final class IntSetKt {
     method public static androidx.collection.IntSet emptyIntSet();
+    method public static androidx.collection.IntSet intSetOf();
+    method public static androidx.collection.IntSet intSetOf(int element1);
+    method public static androidx.collection.IntSet intSetOf(int element1, int element2);
+    method public static androidx.collection.IntSet intSetOf(int element1, int element2, int element3);
+    method public static androidx.collection.IntSet intSetOf(int... elements);
     method public static androidx.collection.MutableIntSet mutableIntSetOf();
+    method public static androidx.collection.MutableIntSet mutableIntSetOf(int element1);
+    method public static androidx.collection.MutableIntSet mutableIntSetOf(int element1, int element2);
+    method public static androidx.collection.MutableIntSet mutableIntSetOf(int element1, int element2, int element3);
     method public static androidx.collection.MutableIntSet mutableIntSetOf(int... elements);
   }
 
@@ -281,7 +315,16 @@
   }
 
   public final class LongListKt {
+    method public static androidx.collection.LongList emptyLongList();
+    method public static androidx.collection.LongList longListOf();
+    method public static androidx.collection.LongList longListOf(long element1);
+    method public static androidx.collection.LongList longListOf(long element1, long element2);
+    method public static androidx.collection.LongList longListOf(long element1, long element2, long element3);
+    method public static androidx.collection.LongList longListOf(long... elements);
     method public static inline androidx.collection.MutableLongList mutableLongListOf();
+    method public static androidx.collection.MutableLongList mutableLongListOf(long element1);
+    method public static androidx.collection.MutableLongList mutableLongListOf(long element1, long element2);
+    method public static androidx.collection.MutableLongList mutableLongListOf(long element1, long element2, long element3);
     method public static inline androidx.collection.MutableLongList mutableLongListOf(long... elements);
   }
 
@@ -309,7 +352,15 @@
 
   public final class LongSetKt {
     method public static androidx.collection.LongSet emptyLongSet();
+    method public static androidx.collection.LongSet longSetOf();
+    method public static androidx.collection.LongSet longSetOf(long element1);
+    method public static androidx.collection.LongSet longSetOf(long element1, long element2);
+    method public static androidx.collection.LongSet longSetOf(long element1, long element2, long element3);
+    method public static androidx.collection.LongSet longSetOf(long... elements);
     method public static androidx.collection.MutableLongSet mutableLongSetOf();
+    method public static androidx.collection.MutableLongSet mutableLongSetOf(long element1);
+    method public static androidx.collection.MutableLongSet mutableLongSetOf(long element1, long element2);
+    method public static androidx.collection.MutableLongSet mutableLongSetOf(long element1, long element2, long element3);
     method public static androidx.collection.MutableLongSet mutableLongSetOf(long... elements);
   }
 
@@ -682,7 +733,15 @@
   public final class ScatterSetKt {
     method public static <E> androidx.collection.ScatterSet<E> emptyScatterSet();
     method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf();
+    method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E element1);
+    method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E element1, E element2);
+    method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E element1, E element2, E element3);
     method public static <E> androidx.collection.MutableScatterSet<E> mutableScatterSetOf(E?... elements);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf();
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E element1);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E element1, E element2);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E element1, E element2, E element3);
+    method public static <E> androidx.collection.ScatterSet<E> scatterSetOf(E?... elements);
   }
 
   public class SimpleArrayMap<K, V> {
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/CircularArray.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/CircularArray.kt
index b3cb747..88275c9 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/CircularArray.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/CircularArray.kt
@@ -97,7 +97,7 @@
      * Remove first element from front of the [CircularArray] and return it.
      *
      * @return The element removed.
-     * @throws [ArrayIndexOutOfBoundsException] if [CircularArray] is empty (on jvm)
+     * @throws [IndexOutOfBoundsException] if [CircularArray] is empty (on jvm)
      */
     public fun popFirst(): E {
         if (head == tail) {
@@ -115,7 +115,7 @@
      * Remove last element from end of the [CircularArray] and return it.
      *
      * @return The element removed.
-     * @throws [ArrayIndexOutOfBoundsException] if [CircularArray] is empty
+     * @throws [IndexOutOfBoundsException] if [CircularArray] is empty
      */
     public fun popLast(): E {
         if (head == tail) {
@@ -142,7 +142,7 @@
      * is less than or equal to 0.
      *
      * @param count Number of elements to remove.
-     * @throws [ArrayIndexOutOfBoundsException] if [count] is larger than [size]
+     * @throws [IndexOutOfBoundsException] if [count] is larger than [size]
      */
     public fun removeFromStart(count: Int) {
         if (count <= 0) {
@@ -177,7 +177,7 @@
      * is less than or equals to 0.
      *
      * @param count Number of elements to remove.
-     * @throws [ArrayIndexOutOfBoundsException] if [count] is larger than [size]
+     * @throws [IndexOutOfBoundsException] if [count] is larger than [size]
      */
     public fun removeFromEnd(count: Int) {
         if (count <= 0) {
@@ -213,7 +213,7 @@
      * Get first element of the [CircularArray].
      *
      * @return The first element.
-     * @throws [ArrayIndexOutOfBoundsException] if [CircularArray] is empty
+     * @throws [IndexOutOfBoundsException] if [CircularArray] is empty
      */
     public val first: E
         get() {
@@ -227,7 +227,7 @@
      * Get last element of the [CircularArray].
      *
      * @return The last element.
-     * @throws [ArrayIndexOutOfBoundsException] if [CircularArray] is empty
+     * @throws [IndexOutOfBoundsException] if [CircularArray] is empty
      */
     public val last: E
         get() {
@@ -242,7 +242,7 @@
      *
      * @param index The zero based element index in the [CircularArray].
      * @return The nth element.
-     * @throws [ArrayIndexOutOfBoundsException] if n < 0 or n >= size()
+     * @throws [IndexOutOfBoundsException] if n < 0 or n >= size()
      */
     public operator fun get(index: Int): E {
         if (index < 0 || index >= size()) {
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/FloatList.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/FloatList.kt
index 5aa24f6..cf0c648 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/FloatList.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/FloatList.kt
@@ -839,13 +839,80 @@
 @Suppress("PrivatePropertyName")
 private val EmptyFloatArray = FloatArray(0)
 
+private val EmptyFloatList: FloatList = MutableFloatList(0)
+
 /**
- * Creates and returns an empty [MutableFloatList] with the default capacity.
+ * @return a read-only [FloatList] with nothing in it.
+ */
+public fun emptyFloatList(): FloatList = EmptyFloatList
+
+/**
+ * @return a read-only [FloatList] with nothing in it.
+ */
+public fun floatListOf(): FloatList = EmptyFloatList
+
+/**
+ * @return a new read-only [FloatList] with [element1] as the only item in the list.
+ */
+public fun floatListOf(element1: Float): FloatList = mutableFloatListOf(element1)
+
+/**
+ * @return a new read-only [FloatList] with 2 elements, [element1] and [element2], in order.
+ */
+public fun floatListOf(element1: Float, element2: Float): FloatList =
+    mutableFloatListOf(element1, element2)
+
+/**
+ * @return a new read-only [FloatList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public fun floatListOf(element1: Float, element2: Float, element3: Float): FloatList =
+    mutableFloatListOf(element1, element2, element3)
+
+/**
+ * @return a new read-only [FloatList] with [elements] in order.
+ */
+public fun floatListOf(vararg elements: Float): FloatList =
+    MutableFloatList(elements.size).apply { plusAssign(elements) }
+
+/**
+ * @return a new empty [MutableFloatList] with the default capacity.
  */
 public inline fun mutableFloatListOf(): MutableFloatList = MutableFloatList()
 
 /**
- * Creates and returns a [MutableFloatList] with the given values.
+ * @return a new [MutableFloatList] with [element1] as the only item in the list.
+ */
+public fun mutableFloatListOf(element1: Float): MutableFloatList {
+    val list = MutableFloatList(1)
+    list += element1
+    return list
+}
+
+/**
+ * @return a new [MutableFloatList] with 2 elements, [element1] and [element2], in order.
+ */
+public fun mutableFloatListOf(element1: Float, element2: Float): MutableFloatList {
+    val list = MutableFloatList(2)
+    list += element1
+    list += element2
+    return list
+}
+
+/**
+ * @return a new [MutableFloatList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public fun mutableFloatListOf(element1: Float, element2: Float, element3: Float): MutableFloatList {
+    val list = MutableFloatList(3)
+    list += element1
+    list += element2
+    list += element3
+    return list
+}
+
+/**
+ * @return a new [MutableFloatList] with the given elements, in order.
  */
 public inline fun mutableFloatListOf(vararg elements: Float): MutableFloatList =
-    MutableFloatList(elements.size).also { it.addAll(elements) }
+    MutableFloatList(elements.size).apply { plusAssign(elements) }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/FloatSet.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/FloatSet.kt
index ec17dcb..278902c4 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/FloatSet.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/FloatSet.kt
@@ -43,17 +43,75 @@
 public fun emptyFloatSet(): FloatSet = EmptyFloatSet
 
 /**
+ * Returns an empty, read-only [ScatterSet].
+ */
+@Suppress("UNCHECKED_CAST")
+public fun floatSetOf(): FloatSet = EmptyFloatSet
+
+/**
+ * Returns a new read-only [FloatSet] with only [element1] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun floatSetOf(element1: Float): FloatSet = mutableFloatSetOf(element1)
+
+/**
+ * Returns a new read-only [FloatSet] with only [element1] and [element2] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun floatSetOf(element1: Float, element2: Float): FloatSet =
+    mutableFloatSetOf(element1, element2)
+
+/**
+ * Returns a new read-only [FloatSet] with only [element1], [element2], and [element3] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun floatSetOf(element1: Float, element2: Float, element3: Float): FloatSet =
+    mutableFloatSetOf(element1, element2, element3)
+
+/**
+ * Returns a new read-only [FloatSet] with only [elements] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun floatSetOf(vararg elements: Float): FloatSet =
+    MutableFloatSet(elements.size).apply { plusAssign(elements) }
+
+/**
  * Returns a new [MutableFloatSet].
  */
 public fun mutableFloatSetOf(): MutableFloatSet = MutableFloatSet()
 
 /**
+ * Returns a new [MutableFloatSet] with only [element1] in it.
+ */
+public fun mutableFloatSetOf(element1: Float): MutableFloatSet =
+    MutableFloatSet(1).apply {
+        plusAssign(element1)
+    }
+
+/**
+ * Returns a new [MutableFloatSet] with only [element1] and [element2] in it.
+ */
+public fun mutableFloatSetOf(element1: Float, element2: Float): MutableFloatSet =
+    MutableFloatSet(2).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+    }
+
+/**
+ * Returns a new [MutableFloatSet] with only [element1], [element2], and [element3] in it.
+ */
+public fun mutableFloatSetOf(element1: Float, element2: Float, element3: Float): MutableFloatSet =
+    MutableFloatSet(3).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+        plusAssign(element3)
+    }
+
+/**
  * Returns a new [MutableFloatSet] with the specified elements.
  */
 public fun mutableFloatSetOf(vararg elements: Float): MutableFloatSet =
-    MutableFloatSet(elements.size).apply {
-        addAll(elements)
-    }
+    MutableFloatSet(elements.size).apply { plusAssign(elements) }
 
 /**
  * [FloatSet] is a container with a [Set]-like interface designed to avoid
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/IntList.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/IntList.kt
index dbeb31b..8c6122db 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/IntList.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/IntList.kt
@@ -483,7 +483,7 @@
  * @constructor Creates a [MutableIntList] with a [capacity] of `initialCapacity`.
  */
 public class MutableIntList(
-    initialCapacity: Int = DefaultCapacity
+    initialCapacity: Int = 16
 ) : IntList(initialCapacity) {
     /**
      * Returns the total number of elements that can be held before the [MutableIntList] must
@@ -835,20 +835,84 @@
     }
 }
 
-@Suppress("ConstPropertyName")
-private const val DefaultCapacity = 16
-
 // Empty array used when nothing is allocated
 @Suppress("PrivatePropertyName")
 private val EmptyIntArray = IntArray(0)
 
+private val EmptyIntList: IntList = MutableIntList(0)
+
 /**
- * Creates and returns an empty [MutableIntList] with the default capacity.
+ * @return a read-only [IntList] with nothing in it.
+ */
+public fun emptyIntList(): IntList = EmptyIntList
+
+/**
+ * @return a read-only [IntList] with nothing in it.
+ */
+public fun intListOf(): IntList = EmptyIntList
+
+/**
+ * @return a new read-only [IntList] with [element1] as the only item in the list.
+ */
+public fun intListOf(element1: Int): IntList = mutableIntListOf(element1)
+
+/**
+ * @return a new read-only [IntList] with 2 elements, [element1] and [element2], in order.
+ */
+public fun intListOf(element1: Int, element2: Int): IntList =
+    mutableIntListOf(element1, element2)
+
+/**
+ * @return a new read-only [IntList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public fun intListOf(element1: Int, element2: Int, element3: Int): IntList =
+    mutableIntListOf(element1, element2, element3)
+
+/**
+ * @return a new read-only [IntList] with [elements] in order.
+ */
+public fun intListOf(vararg elements: Int): IntList =
+    MutableIntList(elements.size).apply { plusAssign(elements) }
+
+/**
+ * @return a new empty [MutableIntList] with the default capacity.
  */
 public inline fun mutableIntListOf(): MutableIntList = MutableIntList()
 
 /**
- * Creates and returns a [MutableIntList] with the given values.
+ * @return a new [MutableIntList] with [element1] as the only item in the list.
+ */
+public fun mutableIntListOf(element1: Int): MutableIntList {
+    val list = MutableIntList(1)
+    list += element1
+    return list
+}
+
+/**
+ * @return a new [MutableIntList] with 2 elements, [element1] and [element2], in order.
+ */
+public fun mutableIntListOf(element1: Int, element2: Int): MutableIntList {
+    val list = MutableIntList(2)
+    list += element1
+    list += element2
+    return list
+}
+
+/**
+ * @return a new [MutableIntList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public fun mutableIntListOf(element1: Int, element2: Int, element3: Int): MutableIntList {
+    val list = MutableIntList(3)
+    list += element1
+    list += element2
+    list += element3
+    return list
+}
+
+/**
+ * @return a new [MutableIntList] with the given elements, in order.
  */
 public inline fun mutableIntListOf(vararg elements: Int): MutableIntList =
-    MutableIntList(elements.size).also { it.addAll(elements) }
+    MutableIntList(elements.size).apply { plusAssign(elements) }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/IntSet.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/IntSet.kt
index fc29782..2db0f7f 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/IntSet.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/IntSet.kt
@@ -34,7 +34,7 @@
 // Default empty set to avoid allocations
 private val EmptyIntSet = MutableIntSet(0)
 
-// An empty array of Ints
+// An empty array of ints
 private val EmptyIntArray = IntArray(0)
 
 /**
@@ -43,17 +43,75 @@
 public fun emptyIntSet(): IntSet = EmptyIntSet
 
 /**
+ * Returns an empty, read-only [ScatterSet].
+ */
+@Suppress("UNCHECKED_CAST")
+public fun intSetOf(): IntSet = EmptyIntSet
+
+/**
+ * Returns a new read-only [IntSet] with only [element1] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun intSetOf(element1: Int): IntSet = mutableIntSetOf(element1)
+
+/**
+ * Returns a new read-only [IntSet] with only [element1] and [element2] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun intSetOf(element1: Int, element2: Int): IntSet =
+    mutableIntSetOf(element1, element2)
+
+/**
+ * Returns a new read-only [IntSet] with only [element1], [element2], and [element3] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun intSetOf(element1: Int, element2: Int, element3: Int): IntSet =
+    mutableIntSetOf(element1, element2, element3)
+
+/**
+ * Returns a new read-only [IntSet] with only [elements] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun intSetOf(vararg elements: Int): IntSet =
+    MutableIntSet(elements.size).apply { plusAssign(elements) }
+
+/**
  * Returns a new [MutableIntSet].
  */
 public fun mutableIntSetOf(): MutableIntSet = MutableIntSet()
 
 /**
+ * Returns a new [MutableIntSet] with only [element1] in it.
+ */
+public fun mutableIntSetOf(element1: Int): MutableIntSet =
+    MutableIntSet(1).apply {
+        plusAssign(element1)
+    }
+
+/**
+ * Returns a new [MutableIntSet] with only [element1] and [element2] in it.
+ */
+public fun mutableIntSetOf(element1: Int, element2: Int): MutableIntSet =
+    MutableIntSet(2).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+    }
+
+/**
+ * Returns a new [MutableIntSet] with only [element1], [element2], and [element3] in it.
+ */
+public fun mutableIntSetOf(element1: Int, element2: Int, element3: Int): MutableIntSet =
+    MutableIntSet(3).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+        plusAssign(element3)
+    }
+
+/**
  * Returns a new [MutableIntSet] with the specified elements.
  */
 public fun mutableIntSetOf(vararg elements: Int): MutableIntSet =
-    MutableIntSet(elements.size).apply {
-        addAll(elements)
-    }
+    MutableIntSet(elements.size).apply { plusAssign(elements) }
 
 /**
  * [IntSet] is a container with a [Set]-like interface designed to avoid
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/LongList.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/LongList.kt
index 85679d4..94dfd82 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/LongList.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/LongList.kt
@@ -483,7 +483,7 @@
  * @constructor Creates a [MutableLongList] with a [capacity] of `initialCapacity`.
  */
 public class MutableLongList(
-    initialCapacity: Int = DefaultCapacity
+    initialCapacity: Int = 16
 ) : LongList(initialCapacity) {
     /**
      * Returns the total number of elements that can be held before the [MutableLongList] must
@@ -835,20 +835,84 @@
     }
 }
 
-@Suppress("ConstPropertyName")
-private const val DefaultCapacity = 16
-
 // Empty array used when nothing is allocated
 @Suppress("PrivatePropertyName")
 private val EmptyLongArray = LongArray(0)
 
+private val EmptyLongList: LongList = MutableLongList(0)
+
 /**
- * Creates and returns an empty [MutableLongList] with the default capacity.
+ * @return a read-only [LongList] with nothing in it.
+ */
+public fun emptyLongList(): LongList = EmptyLongList
+
+/**
+ * @return a read-only [LongList] with nothing in it.
+ */
+public fun longListOf(): LongList = EmptyLongList
+
+/**
+ * @return a new read-only [LongList] with [element1] as the only item in the list.
+ */
+public fun longListOf(element1: Long): LongList = mutableLongListOf(element1)
+
+/**
+ * @return a new read-only [LongList] with 2 elements, [element1] and [element2], in order.
+ */
+public fun longListOf(element1: Long, element2: Long): LongList =
+    mutableLongListOf(element1, element2)
+
+/**
+ * @return a new read-only [LongList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public fun longListOf(element1: Long, element2: Long, element3: Long): LongList =
+    mutableLongListOf(element1, element2, element3)
+
+/**
+ * @return a new read-only [LongList] with [elements] in order.
+ */
+public fun longListOf(vararg elements: Long): LongList =
+    MutableLongList(elements.size).apply { plusAssign(elements) }
+
+/**
+ * @return a new empty [MutableLongList] with the default capacity.
  */
 public inline fun mutableLongListOf(): MutableLongList = MutableLongList()
 
 /**
- * Creates and returns a [MutableLongList] with the given values.
+ * @return a new [MutableLongList] with [element1] as the only item in the list.
+ */
+public fun mutableLongListOf(element1: Long): MutableLongList {
+    val list = MutableLongList(1)
+    list += element1
+    return list
+}
+
+/**
+ * @return a new [MutableLongList] with 2 elements, [element1] and [element2], in order.
+ */
+public fun mutableLongListOf(element1: Long, element2: Long): MutableLongList {
+    val list = MutableLongList(2)
+    list += element1
+    list += element2
+    return list
+}
+
+/**
+ * @return a new [MutableLongList] with 3 elements, [element1], [element2], and [element3],
+ * in order.
+ */
+public fun mutableLongListOf(element1: Long, element2: Long, element3: Long): MutableLongList {
+    val list = MutableLongList(3)
+    list += element1
+    list += element2
+    list += element3
+    return list
+}
+
+/**
+ * @return a new [MutableLongList] with the given elements, in order.
  */
 public inline fun mutableLongListOf(vararg elements: Long): MutableLongList =
-    MutableLongList(elements.size).also { it.addAll(elements) }
+    MutableLongList(elements.size).apply { plusAssign(elements) }
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/LongSet.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/LongSet.kt
index 4cfe132..f292716 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/LongSet.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/LongSet.kt
@@ -34,7 +34,7 @@
 // Default empty set to avoid allocations
 private val EmptyLongSet = MutableLongSet(0)
 
-// An empty array of Longs
+// An empty array of longs
 private val EmptyLongArray = LongArray(0)
 
 /**
@@ -43,17 +43,75 @@
 public fun emptyLongSet(): LongSet = EmptyLongSet
 
 /**
+ * Returns an empty, read-only [ScatterSet].
+ */
+@Suppress("UNCHECKED_CAST")
+public fun longSetOf(): LongSet = EmptyLongSet
+
+/**
+ * Returns a new read-only [LongSet] with only [element1] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun longSetOf(element1: Long): LongSet = mutableLongSetOf(element1)
+
+/**
+ * Returns a new read-only [LongSet] with only [element1] and [element2] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun longSetOf(element1: Long, element2: Long): LongSet =
+    mutableLongSetOf(element1, element2)
+
+/**
+ * Returns a new read-only [LongSet] with only [element1], [element2], and [element3] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun longSetOf(element1: Long, element2: Long, element3: Long): LongSet =
+    mutableLongSetOf(element1, element2, element3)
+
+/**
+ * Returns a new read-only [LongSet] with only [elements] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun longSetOf(vararg elements: Long): LongSet =
+    MutableLongSet(elements.size).apply { plusAssign(elements) }
+
+/**
  * Returns a new [MutableLongSet].
  */
 public fun mutableLongSetOf(): MutableLongSet = MutableLongSet()
 
 /**
+ * Returns a new [MutableLongSet] with only [element1] in it.
+ */
+public fun mutableLongSetOf(element1: Long): MutableLongSet =
+    MutableLongSet(1).apply {
+        plusAssign(element1)
+    }
+
+/**
+ * Returns a new [MutableLongSet] with only [element1] and [element2] in it.
+ */
+public fun mutableLongSetOf(element1: Long, element2: Long): MutableLongSet =
+    MutableLongSet(2).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+    }
+
+/**
+ * Returns a new [MutableLongSet] with only [element1], [element2], and [element3] in it.
+ */
+public fun mutableLongSetOf(element1: Long, element2: Long, element3: Long): MutableLongSet =
+    MutableLongSet(3).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+        plusAssign(element3)
+    }
+
+/**
  * Returns a new [MutableLongSet] with the specified elements.
  */
 public fun mutableLongSetOf(vararg elements: Long): MutableLongSet =
-    MutableLongSet(elements.size).apply {
-        addAll(elements)
-    }
+    MutableLongSet(elements.size).apply { plusAssign(elements) }
 
 /**
  * [LongSet] is a container with a [Set]-like interface designed to avoid
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt
index 84462e9..aac435a 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/PairFloatFloat.kt
@@ -22,6 +22,11 @@
 
 /**
  * Container to ease passing around a tuple of two [Float] values.
+ *
+ * *Note*: This class is optimized by using a value class, a Kotlin language featured
+ * not available from Java code. Java developers can get the same functionality by
+ * using [Pair] or by constructing a custom implementation using Float parameters
+ * directly (see [PairLongLong] for an example).
  */
 @JvmInline
 public value class PairFloatFloat internal constructor(
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt
index 941a5f8..0c7df8f 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/PairIntInt.kt
@@ -22,6 +22,11 @@
 
 /**
  * Container to ease passing around a tuple of two [Int] values.
+ *
+ * *Note*: This class is optimized by using a value class, a Kotlin language featured
+ * not available from Java code. Java developers can get the same functionality by
+ * using [Pair] or by constructing a custom implementation using Int parameters
+ * directly (see [PairLongLong] for an example).
  */
 @JvmInline
 public value class PairIntInt internal constructor(
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterSet.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterSet.kt
index 3b13f66..2eac81f 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterSet.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/ScatterSet.kt
@@ -42,17 +42,75 @@
 public fun <E> emptyScatterSet(): ScatterSet<E> = EmptyScatterSet as ScatterSet<E>
 
 /**
+ * Returns an empty, read-only [ScatterSet].
+ */
+@Suppress("UNCHECKED_CAST")
+public fun <E> scatterSetOf(): ScatterSet<E> = EmptyScatterSet as ScatterSet<E>
+
+/**
+ * Returns a new read-only [ScatterSet] with only [element1] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun <E> scatterSetOf(element1: E): ScatterSet<E> = mutableScatterSetOf(element1)
+
+/**
+ * Returns a new read-only [ScatterSet] with only [element1] and [element2] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun <E> scatterSetOf(element1: E, element2: E): ScatterSet<E> =
+    mutableScatterSetOf(element1, element2)
+
+/**
+ * Returns a new read-only [ScatterSet] with only [element1], [element2], and [element3] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun <E> scatterSetOf(element1: E, element2: E, element3: E): ScatterSet<E> =
+    mutableScatterSetOf(element1, element2, element3)
+
+/**
+ * Returns a new read-only [ScatterSet] with only [elements] in it.
+ */
+@Suppress("UNCHECKED_CAST")
+public fun <E> scatterSetOf(vararg elements: E): ScatterSet<E> =
+    MutableScatterSet<E>(elements.size).apply { plusAssign(elements) }
+
+/**
  * Returns a new [MutableScatterSet].
  */
 public fun <E> mutableScatterSetOf(): MutableScatterSet<E> = MutableScatterSet()
 
 /**
+ * Returns a new [MutableScatterSet] with only [element1] in it.
+ */
+public fun <E> mutableScatterSetOf(element1: E): MutableScatterSet<E> =
+    MutableScatterSet<E>(1).apply {
+        plusAssign(element1)
+    }
+
+/**
+ * Returns a new [MutableScatterSet] with only [element1] and [element2] in it.
+ */
+public fun <E> mutableScatterSetOf(element1: E, element2: E): MutableScatterSet<E> =
+    MutableScatterSet<E>(2).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+    }
+
+/**
+ * Returns a new [MutableScatterSet] with only [element1], [element2], and [element3] in it.
+ */
+public fun <E> mutableScatterSetOf(element1: E, element2: E, element3: E): MutableScatterSet<E> =
+    MutableScatterSet<E>(3).apply {
+        plusAssign(element1)
+        plusAssign(element2)
+        plusAssign(element3)
+    }
+
+/**
  * Returns a new [MutableScatterSet] with the specified contents.
  */
 public fun <E> mutableScatterSetOf(vararg elements: E): MutableScatterSet<E> =
-    MutableScatterSet<E>(elements.size).apply {
-        addAll(elements)
-    }
+    MutableScatterSet<E>(elements.size).apply { plusAssign(elements) }
 
 /**
  * [ScatterSet] is a container with a [Set]-like interface based on a flat
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/FloatListTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/FloatListTest.kt
index 63d4ce6..b4e501b 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/FloatListTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/FloatListTest.kt
@@ -629,4 +629,88 @@
         l.sortDescending()
         assertEquals(mutableFloatListOf(5f, 4f, 3f, 2f, 1f), l)
     }
+
+    @Test
+    fun testEmptyFloatList() {
+        val l = emptyFloatList()
+        assertEquals(0, l.size)
+    }
+
+    @Test
+    fun floatListOfEmpty() {
+        val l = floatListOf()
+        assertEquals(0, l.size)
+    }
+
+    @Test
+    fun floatListOfOneValue() {
+        val l = floatListOf(2f)
+        assertEquals(1, l.size)
+        assertEquals(2f, l[0])
+    }
+
+    @Test
+    fun floatListOfTwoValues() {
+        val l = floatListOf(2f, 1f)
+        assertEquals(2, l.size)
+        assertEquals(2f, l[0])
+        assertEquals(1f, l[1])
+    }
+
+    @Test
+    fun floatListOfThreeValues() {
+        val l = floatListOf(2f, 10f, -1f)
+        assertEquals(3, l.size)
+        assertEquals(2f, l[0])
+        assertEquals(10f, l[1])
+        assertEquals(-1f, l[2])
+    }
+
+    @Test
+    fun floatListOfFourValues() {
+        val l = floatListOf(2f, 10f, -1f, 10f)
+        assertEquals(4, l.size)
+        assertEquals(2f, l[0])
+        assertEquals(10f, l[1])
+        assertEquals(-1f, l[2])
+        assertEquals(10f, l[3])
+    }
+
+    @Test
+    fun mutableFloatListOfOneValue() {
+        val l = mutableFloatListOf(2f)
+        assertEquals(1, l.size)
+        assertEquals(1, l.capacity)
+        assertEquals(2f, l[0])
+    }
+
+    @Test
+    fun mutableFloatListOfTwoValues() {
+        val l = mutableFloatListOf(2f, 1f)
+        assertEquals(2, l.size)
+        assertEquals(2, l.capacity)
+        assertEquals(2f, l[0])
+        assertEquals(1f, l[1])
+    }
+
+    @Test
+    fun mutableFloatListOfThreeValues() {
+        val l = mutableFloatListOf(2f, 10f, -1f)
+        assertEquals(3, l.size)
+        assertEquals(3, l.capacity)
+        assertEquals(2f, l[0])
+        assertEquals(10f, l[1])
+        assertEquals(-1f, l[2])
+    }
+
+    @Test
+    fun mutableFloatListOfFourValues() {
+        val l = mutableFloatListOf(2f, 10f, -1f, 10f)
+        assertEquals(4, l.size)
+        assertEquals(4, l.capacity)
+        assertEquals(2f, l[0])
+        assertEquals(10f, l[1])
+        assertEquals(-1f, l[2])
+        assertEquals(10f, l[3])
+    }
 }
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/FloatSetTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/FloatSetTest.kt
index df1c181..98f7b59 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/FloatSetTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/FloatSetTest.kt
@@ -20,6 +20,7 @@
 import kotlin.test.assertFailsWith
 import kotlin.test.assertFalse
 import kotlin.test.assertNotEquals
+import kotlin.test.assertSame
 import kotlin.test.assertTrue
 
 class FloatSetTest {
@@ -442,4 +443,84 @@
         assertTrue(set.trim() > 0)
         assertEquals(capacity, set.capacity)
     }
+
+    @Test
+    fun floatSetOfEmpty() {
+        assertSame(emptyFloatSet(), floatSetOf())
+        assertEquals(0, floatSetOf().size)
+    }
+
+    @Test
+    fun floatSetOfOne() {
+        val set = floatSetOf(1f)
+        assertEquals(1, set.size)
+        assertEquals(1f, set.first())
+    }
+
+    @Test
+    fun floatSetOfTwo() {
+        val set = floatSetOf(1f, 2f)
+        assertEquals(2, set.size)
+        assertTrue(1f in set)
+        assertTrue(2f in set)
+        assertFalse(5f in set)
+    }
+
+    @Test
+    fun floatSetOfThree() {
+        val set = floatSetOf(1f, 2f, 3f)
+        assertEquals(3, set.size)
+        assertTrue(1f in set)
+        assertTrue(2f in set)
+        assertTrue(3f in set)
+        assertFalse(5f in set)
+    }
+
+    @Test
+    fun floatSetOfFour() {
+        val set = floatSetOf(1f, 2f, 3f, 4f)
+        assertEquals(4, set.size)
+        assertTrue(1f in set)
+        assertTrue(2f in set)
+        assertTrue(3f in set)
+        assertTrue(4f in set)
+        assertFalse(5f in set)
+    }
+
+    @Test
+    fun mutableFloatSetOfOne() {
+        val set = mutableFloatSetOf(1f)
+        assertEquals(1, set.size)
+        assertEquals(1f, set.first())
+    }
+
+    @Test
+    fun mutableFloatSetOfTwo() {
+        val set = mutableFloatSetOf(1f, 2f)
+        assertEquals(2, set.size)
+        assertTrue(1f in set)
+        assertTrue(2f in set)
+        assertFalse(5f in set)
+    }
+
+    @Test
+    fun mutableFloatSetOfThree() {
+        val set = mutableFloatSetOf(1f, 2f, 3f)
+        assertEquals(3, set.size)
+        assertTrue(1f in set)
+        assertTrue(2f in set)
+        assertTrue(3f in set)
+        assertFalse(5f in set)
+    }
+
+    @Test
+    fun mutableFloatSetOfFour() {
+        val set = mutableFloatSetOf(1f, 2f, 3f, 4f)
+        assertEquals(4, set.size)
+        assertTrue(1f in set)
+        assertTrue(2f in set)
+        assertTrue(3f in set)
+        assertTrue(4f in set)
+        assertFalse(5f in set)
+    }
 }
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/IntListTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/IntListTest.kt
index 068527c..66d89af 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/IntListTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/IntListTest.kt
@@ -628,4 +628,88 @@
         l.sortDescending()
         assertEquals(mutableIntListOf(5, 4, 3, 2, 1), l)
     }
+
+    @Test
+    fun testEmptyIntList() {
+        val l = emptyIntList()
+        assertEquals(0, l.size)
+    }
+
+    @Test
+    fun intListOfEmpty() {
+        val l = intListOf()
+        assertEquals(0, l.size)
+    }
+
+    @Test
+    fun intListOfOneValue() {
+        val l = intListOf(2)
+        assertEquals(1, l.size)
+        assertEquals(2, l[0])
+    }
+
+    @Test
+    fun intListOfTwoValues() {
+        val l = intListOf(2, 1)
+        assertEquals(2, l.size)
+        assertEquals(2, l[0])
+        assertEquals(1, l[1])
+    }
+
+    @Test
+    fun intListOfThreeValues() {
+        val l = intListOf(2, 10, -1)
+        assertEquals(3, l.size)
+        assertEquals(2, l[0])
+        assertEquals(10, l[1])
+        assertEquals(-1, l[2])
+    }
+
+    @Test
+    fun intListOfFourValues() {
+        val l = intListOf(2, 10, -1, 10)
+        assertEquals(4, l.size)
+        assertEquals(2, l[0])
+        assertEquals(10, l[1])
+        assertEquals(-1, l[2])
+        assertEquals(10, l[3])
+    }
+
+    @Test
+    fun mutableIntListOfOneValue() {
+        val l = mutableIntListOf(2)
+        assertEquals(1, l.size)
+        assertEquals(1, l.capacity)
+        assertEquals(2, l[0])
+    }
+
+    @Test
+    fun mutableIntListOfTwoValues() {
+        val l = mutableIntListOf(2, 1)
+        assertEquals(2, l.size)
+        assertEquals(2, l.capacity)
+        assertEquals(2, l[0])
+        assertEquals(1, l[1])
+    }
+
+    @Test
+    fun mutableIntListOfThreeValues() {
+        val l = mutableIntListOf(2, 10, -1)
+        assertEquals(3, l.size)
+        assertEquals(3, l.capacity)
+        assertEquals(2, l[0])
+        assertEquals(10, l[1])
+        assertEquals(-1, l[2])
+    }
+
+    @Test
+    fun mutableIntListOfFourValues() {
+        val l = mutableIntListOf(2, 10, -1, 10)
+        assertEquals(4, l.size)
+        assertEquals(4, l.capacity)
+        assertEquals(2, l[0])
+        assertEquals(10, l[1])
+        assertEquals(-1, l[2])
+        assertEquals(10, l[3])
+    }
 }
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/IntSetTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/IntSetTest.kt
index 121b0a6..9d326e1 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/IntSetTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/IntSetTest.kt
@@ -20,6 +20,7 @@
 import kotlin.test.assertFailsWith
 import kotlin.test.assertFalse
 import kotlin.test.assertNotEquals
+import kotlin.test.assertSame
 import kotlin.test.assertTrue
 
 class IntSetTest {
@@ -442,4 +443,84 @@
         assertTrue(set.trim() > 0)
         assertEquals(capacity, set.capacity)
     }
+
+    @Test
+    fun intSetOfEmpty() {
+        assertSame(emptyIntSet(), intSetOf())
+        assertEquals(0, intSetOf().size)
+    }
+
+    @Test
+    fun intSetOfOne() {
+        val set = intSetOf(1)
+        assertEquals(1, set.size)
+        assertEquals(1, set.first())
+    }
+
+    @Test
+    fun intSetOfTwo() {
+        val set = intSetOf(1, 2)
+        assertEquals(2, set.size)
+        assertTrue(1 in set)
+        assertTrue(2 in set)
+        assertFalse(5 in set)
+    }
+
+    @Test
+    fun intSetOfThree() {
+        val set = intSetOf(1, 2, 3)
+        assertEquals(3, set.size)
+        assertTrue(1 in set)
+        assertTrue(2 in set)
+        assertTrue(3 in set)
+        assertFalse(5 in set)
+    }
+
+    @Test
+    fun intSetOfFour() {
+        val set = intSetOf(1, 2, 3, 4)
+        assertEquals(4, set.size)
+        assertTrue(1 in set)
+        assertTrue(2 in set)
+        assertTrue(3 in set)
+        assertTrue(4 in set)
+        assertFalse(5 in set)
+    }
+
+    @Test
+    fun mutableIntSetOfOne() {
+        val set = mutableIntSetOf(1)
+        assertEquals(1, set.size)
+        assertEquals(1, set.first())
+    }
+
+    @Test
+    fun mutableIntSetOfTwo() {
+        val set = mutableIntSetOf(1, 2)
+        assertEquals(2, set.size)
+        assertTrue(1 in set)
+        assertTrue(2 in set)
+        assertFalse(5 in set)
+    }
+
+    @Test
+    fun mutableIntSetOfThree() {
+        val set = mutableIntSetOf(1, 2, 3)
+        assertEquals(3, set.size)
+        assertTrue(1 in set)
+        assertTrue(2 in set)
+        assertTrue(3 in set)
+        assertFalse(5 in set)
+    }
+
+    @Test
+    fun mutableIntSetOfFour() {
+        val set = mutableIntSetOf(1, 2, 3, 4)
+        assertEquals(4, set.size)
+        assertTrue(1 in set)
+        assertTrue(2 in set)
+        assertTrue(3 in set)
+        assertTrue(4 in set)
+        assertFalse(5 in set)
+    }
 }
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/LongListTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/LongListTest.kt
index e9893fa..45aa039 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/LongListTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/LongListTest.kt
@@ -628,4 +628,88 @@
         l.sortDescending()
         assertEquals(mutableLongListOf(5L, 4L, 3L, 2L, 1L), l)
     }
+
+    @Test
+    fun testEmptyLongList() {
+        val l = emptyLongList()
+        assertEquals(0, l.size)
+    }
+
+    @Test
+    fun longListOfEmpty() {
+        val l = longListOf()
+        assertEquals(0, l.size)
+    }
+
+    @Test
+    fun longListOfOneValue() {
+        val l = longListOf(2L)
+        assertEquals(1, l.size)
+        assertEquals(2L, l[0])
+    }
+
+    @Test
+    fun longListOfTwoValues() {
+        val l = longListOf(2L, 1L)
+        assertEquals(2, l.size)
+        assertEquals(2L, l[0])
+        assertEquals(1L, l[1])
+    }
+
+    @Test
+    fun longListOfThreeValues() {
+        val l = longListOf(2L, 10L, -1L)
+        assertEquals(3, l.size)
+        assertEquals(2L, l[0])
+        assertEquals(10L, l[1])
+        assertEquals(-1L, l[2])
+    }
+
+    @Test
+    fun longListOfFourValues() {
+        val l = longListOf(2L, 10L, -1L, 10L)
+        assertEquals(4, l.size)
+        assertEquals(2L, l[0])
+        assertEquals(10L, l[1])
+        assertEquals(-1L, l[2])
+        assertEquals(10L, l[3])
+    }
+
+    @Test
+    fun mutableLongListOfOneValue() {
+        val l = mutableLongListOf(2L)
+        assertEquals(1, l.size)
+        assertEquals(1, l.capacity)
+        assertEquals(2L, l[0])
+    }
+
+    @Test
+    fun mutableLongListOfTwoValues() {
+        val l = mutableLongListOf(2L, 1L)
+        assertEquals(2, l.size)
+        assertEquals(2, l.capacity)
+        assertEquals(2L, l[0])
+        assertEquals(1L, l[1])
+    }
+
+    @Test
+    fun mutableLongListOfThreeValues() {
+        val l = mutableLongListOf(2L, 10L, -1L)
+        assertEquals(3, l.size)
+        assertEquals(3, l.capacity)
+        assertEquals(2L, l[0])
+        assertEquals(10L, l[1])
+        assertEquals(-1L, l[2])
+    }
+
+    @Test
+    fun mutableLongListOfFourValues() {
+        val l = mutableLongListOf(2L, 10L, -1L, 10L)
+        assertEquals(4, l.size)
+        assertEquals(4, l.capacity)
+        assertEquals(2L, l[0])
+        assertEquals(10L, l[1])
+        assertEquals(-1L, l[2])
+        assertEquals(10L, l[3])
+    }
 }
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/LongSetTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/LongSetTest.kt
index de7549d..1278fcf 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/LongSetTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/LongSetTest.kt
@@ -20,6 +20,7 @@
 import kotlin.test.assertFailsWith
 import kotlin.test.assertFalse
 import kotlin.test.assertNotEquals
+import kotlin.test.assertSame
 import kotlin.test.assertTrue
 
 class LongSetTest {
@@ -442,4 +443,84 @@
         assertTrue(set.trim() > 0)
         assertEquals(capacity, set.capacity)
     }
+
+    @Test
+    fun longSetOfEmpty() {
+        assertSame(emptyLongSet(), longSetOf())
+        assertEquals(0, longSetOf().size)
+    }
+
+    @Test
+    fun longSetOfOne() {
+        val set = longSetOf(1L)
+        assertEquals(1, set.size)
+        assertEquals(1L, set.first())
+    }
+
+    @Test
+    fun longSetOfTwo() {
+        val set = longSetOf(1L, 2L)
+        assertEquals(2, set.size)
+        assertTrue(1L in set)
+        assertTrue(2L in set)
+        assertFalse(5L in set)
+    }
+
+    @Test
+    fun longSetOfThree() {
+        val set = longSetOf(1L, 2L, 3L)
+        assertEquals(3, set.size)
+        assertTrue(1L in set)
+        assertTrue(2L in set)
+        assertTrue(3L in set)
+        assertFalse(5L in set)
+    }
+
+    @Test
+    fun longSetOfFour() {
+        val set = longSetOf(1L, 2L, 3L, 4L)
+        assertEquals(4, set.size)
+        assertTrue(1L in set)
+        assertTrue(2L in set)
+        assertTrue(3L in set)
+        assertTrue(4L in set)
+        assertFalse(5L in set)
+    }
+
+    @Test
+    fun mutableLongSetOfOne() {
+        val set = mutableLongSetOf(1L)
+        assertEquals(1, set.size)
+        assertEquals(1L, set.first())
+    }
+
+    @Test
+    fun mutableLongSetOfTwo() {
+        val set = mutableLongSetOf(1L, 2L)
+        assertEquals(2, set.size)
+        assertTrue(1L in set)
+        assertTrue(2L in set)
+        assertFalse(5L in set)
+    }
+
+    @Test
+    fun mutableLongSetOfThree() {
+        val set = mutableLongSetOf(1L, 2L, 3L)
+        assertEquals(3, set.size)
+        assertTrue(1L in set)
+        assertTrue(2L in set)
+        assertTrue(3L in set)
+        assertFalse(5L in set)
+    }
+
+    @Test
+    fun mutableLongSetOfFour() {
+        val set = mutableLongSetOf(1L, 2L, 3L, 4L)
+        assertEquals(4, set.size)
+        assertTrue(1L in set)
+        assertTrue(2L in set)
+        assertTrue(3L in set)
+        assertTrue(4L in set)
+        assertFalse(5L in set)
+    }
 }
diff --git a/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterSetTest.kt b/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterSetTest.kt
index 201b2ef..60de883 100644
--- a/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterSetTest.kt
+++ b/collection/collection/src/commonTest/kotlin/androidx/collection/ScatterSetTest.kt
@@ -21,6 +21,7 @@
 import kotlin.test.assertFalse
 import kotlin.test.assertNotEquals
 import kotlin.test.assertNull
+import kotlin.test.assertSame
 import kotlin.test.assertTrue
 
 class ScatterSetTest {
@@ -648,4 +649,84 @@
         assertTrue(set.trim() > 0)
         assertEquals(capacity, set.capacity)
     }
+
+    @Test
+    fun scatterSetOfEmpty() {
+        assertSame(emptyScatterSet<String>(), scatterSetOf<String>())
+        assertEquals(0, scatterSetOf<String>().size)
+    }
+
+    @Test
+    fun scatterSetOfOne() {
+        val set = scatterSetOf("Hello")
+        assertEquals(1, set.size)
+        assertEquals("Hello", set.first())
+    }
+
+    @Test
+    fun scatterSetOfTwo() {
+        val set = scatterSetOf("Hello", "World")
+        assertEquals(2, set.size)
+        assertTrue("Hello" in set)
+        assertTrue("World" in set)
+        assertFalse("Bonjour" in set)
+    }
+
+    @Test
+    fun scatterSetOfThree() {
+        val set = scatterSetOf("Hello", "World", "Hola")
+        assertEquals(3, set.size)
+        assertTrue("Hello" in set)
+        assertTrue("World" in set)
+        assertTrue("Hola" in set)
+        assertFalse("Bonjour" in set)
+    }
+
+    @Test
+    fun scatterSetOfFour() {
+        val set = scatterSetOf("Hello", "World", "Hola", "Mundo")
+        assertEquals(4, set.size)
+        assertTrue("Hello" in set)
+        assertTrue("World" in set)
+        assertTrue("Hola" in set)
+        assertTrue("Mundo" in set)
+        assertFalse("Bonjour" in set)
+    }
+
+    @Test
+    fun mutableScatterSetOfOne() {
+        val set = mutableScatterSetOf("Hello")
+        assertEquals(1, set.size)
+        assertEquals("Hello", set.first())
+    }
+
+    @Test
+    fun mutableScatterSetOfTwo() {
+        val set = mutableScatterSetOf("Hello", "World")
+        assertEquals(2, set.size)
+        assertTrue("Hello" in set)
+        assertTrue("World" in set)
+        assertFalse("Bonjour" in set)
+    }
+
+    @Test
+    fun mutableScatterSetOfThree() {
+        val set = mutableScatterSetOf("Hello", "World", "Hola")
+        assertEquals(3, set.size)
+        assertTrue("Hello" in set)
+        assertTrue("World" in set)
+        assertTrue("Hola" in set)
+        assertFalse("Bonjour" in set)
+    }
+
+    @Test
+    fun mutableScatterSetOfFour() {
+        val set = mutableScatterSetOf("Hello", "World", "Hola", "Mundo")
+        assertEquals(4, set.size)
+        assertTrue("Hello" in set)
+        assertTrue("World" in set)
+        assertTrue("Hola" in set)
+        assertTrue("Mundo" in set)
+        assertFalse("Bonjour" in set)
+    }
 }
diff --git a/collection/settings.gradle b/collection/settings.gradle
index e70b8e0..e6fea71 100644
--- a/collection/settings.gradle
+++ b/collection/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
@@ -34,4 +34,3 @@
         return false
     })
 }
-
diff --git a/compose/animation/animation-core/api/current.txt b/compose/animation/animation-core/api/current.txt
index d1a61aa..a08aaa1 100644
--- a/compose/animation/animation-core/api/current.txt
+++ b/compose/animation/animation-core/api/current.txt
@@ -461,15 +461,15 @@
     property @IntRange(from=0L) public final int durationMillis;
   }
 
-  public final class MutableTransitionState<S> {
+  public final class MutableTransitionState<S> extends androidx.compose.animation.core.TransitionState<S> {
     ctor public MutableTransitionState(S initialState);
     method public S getCurrentState();
     method public S getTargetState();
     method public boolean isIdle();
     method public void setTargetState(S!);
-    property public final S currentState;
+    property public S currentState;
     property public final boolean isIdle;
-    property public final S targetState;
+    property public S targetState;
   }
 
   public enum RepeatMode {
@@ -493,6 +493,19 @@
     property public final androidx.compose.animation.core.RepeatMode repeatMode;
   }
 
+  @SuppressCompatibility @androidx.compose.animation.core.ExperimentalTransitionApi public final class SeekableTransitionState<S> extends androidx.compose.animation.core.TransitionState<S> {
+    ctor public SeekableTransitionState(S initialState, S targetState);
+    method public suspend Object? animateToCurrentState(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? animateToTargetState(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public S getCurrentState();
+    method @FloatRange(from=0.0, to=1.0) public float getFraction();
+    method public S getTargetState();
+    method public suspend Object? snapToFraction(@FloatRange(from=0.0, to=1.0) float fraction, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public S currentState;
+    property @FloatRange(from=0.0, to=1.0) public final float fraction;
+    property public S targetState;
+  }
+
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
     ctor public SnapSpec(optional int delay);
     method public int getDelay();
@@ -622,10 +635,18 @@
     method @androidx.compose.runtime.Composable public static inline <S> androidx.compose.runtime.State<androidx.compose.ui.geometry.Size> animateSize(androidx.compose.animation.core.Transition<S>, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.geometry.Size>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,androidx.compose.ui.geometry.Size> targetValueByState);
     method @androidx.compose.runtime.Composable public static inline <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> animateValue(androidx.compose.animation.core.Transition<S>, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, optional kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.Transition.Segment<S>,? extends androidx.compose.animation.core.FiniteAnimationSpec<T>> transitionSpec, optional String label, kotlin.jvm.functions.Function1<? super S,? extends T> targetValueByState);
     method @SuppressCompatibility @androidx.compose.animation.core.ExperimentalTransitionApi @androidx.compose.runtime.Composable public static inline <S, T> androidx.compose.animation.core.Transition<T> createChildTransition(androidx.compose.animation.core.Transition<S>, optional String label, kotlin.jvm.functions.Function1<? super S,? extends T> transformToChildState);
+    method @SuppressCompatibility @androidx.compose.animation.core.ExperimentalTransitionApi @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> rememberTransition(androidx.compose.animation.core.TransitionState<T> transitionState, optional String? label);
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(androidx.compose.animation.core.MutableTransitionState<T> transitionState, optional String? label);
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
   }
 
+  public abstract sealed class TransitionState<S> {
+    method public abstract S getCurrentState();
+    method public abstract S getTargetState();
+    property public abstract S currentState;
+    property public abstract S targetState;
+  }
+
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
     ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
diff --git a/compose/animation/animation-core/api/restricted_current.txt b/compose/animation/animation-core/api/restricted_current.txt
index 23c18bd..04f1097 100644
--- a/compose/animation/animation-core/api/restricted_current.txt
+++ b/compose/animation/animation-core/api/restricted_current.txt
@@ -461,15 +461,15 @@
     property @IntRange(from=0L) public final int durationMillis;
   }
 
-  public final class MutableTransitionState<S> {
+  public final class MutableTransitionState<S> extends androidx.compose.animation.core.TransitionState<S> {
     ctor public MutableTransitionState(S initialState);
     method public S getCurrentState();
     method public S getTargetState();
     method public boolean isIdle();
     method public void setTargetState(S!);
-    property public final S currentState;
+    property public S currentState;
     property public final boolean isIdle;
-    property public final S targetState;
+    property public S targetState;
   }
 
   public enum RepeatMode {
@@ -493,6 +493,19 @@
     property public final androidx.compose.animation.core.RepeatMode repeatMode;
   }
 
+  @SuppressCompatibility @androidx.compose.animation.core.ExperimentalTransitionApi public final class SeekableTransitionState<S> extends androidx.compose.animation.core.TransitionState<S> {
+    ctor public SeekableTransitionState(S initialState, S targetState);
+    method public suspend Object? animateToCurrentState(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? animateToTargetState(optional androidx.compose.animation.core.FiniteAnimationSpec<java.lang.Float> animationSpec, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public S getCurrentState();
+    method @FloatRange(from=0.0, to=1.0) public float getFraction();
+    method public S getTargetState();
+    method public suspend Object? snapToFraction(@FloatRange(from=0.0, to=1.0) float fraction, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public S currentState;
+    property @FloatRange(from=0.0, to=1.0) public final float fraction;
+    property public S targetState;
+  }
+
   @androidx.compose.runtime.Immutable public final class SnapSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
     ctor public SnapSpec(optional int delay);
     method public int getDelay();
@@ -573,6 +586,7 @@
 
   @androidx.compose.runtime.Stable public final class Transition<S> {
     ctor @kotlin.PublishedApi internal Transition(androidx.compose.animation.core.MutableTransitionState<S> transitionState, optional String? label);
+    ctor @kotlin.PublishedApi internal Transition(androidx.compose.animation.core.TransitionState<S> transitionState, optional String? label);
     method public java.util.List<androidx.compose.animation.core.Transition<S>.TransitionAnimationState<?,?>> getAnimations();
     method public S getCurrentState();
     method public String? getLabel();
@@ -625,10 +639,18 @@
     method @SuppressCompatibility @androidx.compose.animation.core.ExperimentalTransitionApi @androidx.compose.runtime.Composable public static inline <S, T> androidx.compose.animation.core.Transition<T> createChildTransition(androidx.compose.animation.core.Transition<S>, optional String label, kotlin.jvm.functions.Function1<? super S,? extends T> transformToChildState);
     method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static <S, T> androidx.compose.animation.core.Transition<T> createChildTransitionInternal(androidx.compose.animation.core.Transition<S>, T initialState, T targetState, String childLabel);
     method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static <S, T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.runtime.State<T> createTransitionAnimation(androidx.compose.animation.core.Transition<S>, T initialValue, T targetValue, androidx.compose.animation.core.FiniteAnimationSpec<T> animationSpec, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, String label);
+    method @SuppressCompatibility @androidx.compose.animation.core.ExperimentalTransitionApi @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> rememberTransition(androidx.compose.animation.core.TransitionState<T> transitionState, optional String? label);
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(androidx.compose.animation.core.MutableTransitionState<T> transitionState, optional String? label);
     method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.Transition<T> updateTransition(T targetState, optional String? label);
   }
 
+  public abstract sealed class TransitionState<S> {
+    method public abstract S getCurrentState();
+    method public abstract S getTargetState();
+    property public abstract S currentState;
+    property public abstract S targetState;
+  }
+
   @androidx.compose.runtime.Immutable public final class TweenSpec<T> implements androidx.compose.animation.core.DurationBasedAnimationSpec<T> {
     ctor public TweenSpec(optional int durationMillis, optional int delay, optional androidx.compose.animation.core.Easing easing);
     method public int getDelay();
diff --git a/compose/animation/animation-core/samples/build.gradle b/compose/animation/animation-core/samples/build.gradle
index 735da8e..c90aace 100644
--- a/compose/animation/animation-core/samples/build.gradle
+++ b/compose/animation/animation-core/samples/build.gradle
@@ -27,8 +27,9 @@
 dependencies {
     implementation(libs.kotlinStdlib)
     compileOnly(project(":annotation:annotation-sampled"))
+    implementation(project(":compose:animation:animation"))
     implementation(project(":compose:animation:animation-core"))
-    implementation("androidx.compose.runtime:runtime:1.2.1")
+    implementation(project(":compose:runtime:runtime"))
     implementation("androidx.compose.ui:ui:1.2.1")
     implementation("androidx.compose.ui:ui-unit:1.2.1")
     implementation("androidx.compose.foundation:foundation:1.2.1")
diff --git a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/TransitionSamples.kt b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/TransitionSamples.kt
index eb08b78..ac9788e 100644
--- a/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/TransitionSamples.kt
+++ b/compose/animation/animation-core/samples/src/main/java/androidx/compose/animation/core/samples/TransitionSamples.kt
@@ -17,23 +17,32 @@
 package androidx.compose.animation.core.samples
 
 import androidx.annotation.Sampled
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.ExperimentalAnimationApi
 import androidx.compose.animation.animateColor
 import androidx.compose.animation.core.ExperimentalTransitionApi
+import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.MutableTransitionState
+import androidx.compose.animation.core.SeekableTransitionState
 import androidx.compose.animation.core.Spring
 import androidx.compose.animation.core.Transition
 import androidx.compose.animation.core.animateDp
 import androidx.compose.animation.core.animateFloat
 import androidx.compose.animation.core.createChildTransition
 import androidx.compose.animation.core.keyframes
+import androidx.compose.animation.core.rememberTransition
 import androidx.compose.animation.core.snap
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.tween
 import androidx.compose.animation.core.updateTransition
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.animation.togetherWith
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.heightIn
@@ -46,6 +55,7 @@
 import androidx.compose.material.Card
 import androidx.compose.material.Icon
 import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Slider
 import androidx.compose.material.Text
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Favorite
@@ -53,6 +63,7 @@
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -62,6 +73,7 @@
 import androidx.compose.ui.graphics.graphicsLayer
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.unit.dp
+import kotlinx.coroutines.launch
 
 @Sampled
 @Composable
@@ -80,8 +92,7 @@
     }
 
     // Defines a transition of `ComponentState`, and updates the transition when the provided
-    // [targetState] changes. The tran
-    // sition will run all of the child animations towards the new
+    // [targetState] changes. The transition will run all of the child animations towards the new
     // [targetState] in response to the [targetState] change.
     val transition: Transition<ComponentState> = updateTransition(targetState = toState)
     // Defines a float animation as a child animation the transition. The current animation value
@@ -122,18 +133,24 @@
     }
     Column {
         Button(
-            modifier = Modifier.padding(10.dp).align(Alignment.CenterHorizontally),
+            modifier = Modifier
+                .padding(10.dp)
+                .align(Alignment.CenterHorizontally),
             onClick = { useRed = !useRed }
         ) {
             Text("Change Color")
         }
         Box(
-            modifier.fillMaxSize().wrapContentSize(Alignment.Center)
-                .size((100 * scale).dp).background(color)
+            modifier
+                .fillMaxSize()
+                .wrapContentSize(Alignment.Center)
+                .size((100 * scale).dp)
+                .background(color)
         )
     }
 }
 
+private enum class SquareSize { Small, Large }
 private enum class ComponentState { Pressed, Released }
 private enum class ButtonStatus { Initial, Pressed, Released }
 
@@ -187,6 +204,7 @@
     }
 }
 
+@OptIn(ExperimentalTransitionApi::class)
 @Sampled
 fun InitialStateSample() {
     // This composable enters the composition with a custom enter transition. This is achieved by
@@ -200,7 +218,7 @@
         visibleState.targetState = true
 
         // Creates a transition with the transition state created above.
-        val transition = updateTransition(visibleState)
+        val transition = rememberTransition(visibleState)
         // Adds a scale animation to the transition to scale the card up when transitioning in.
         val scale by transition.animateFloat(
             // Uses a custom spring for the transition.
@@ -225,8 +243,10 @@
         }
 
         Card(
-            Modifier.graphicsLayer(scaleX = scale, scaleY = scale)
-                .size(200.dp, 100.dp).fillMaxWidth(),
+            Modifier
+                .graphicsLayer(scaleX = scale, scaleY = scale)
+                .size(200.dp, 100.dp)
+                .fillMaxWidth(),
             elevation = elevation
         ) {}
     }
@@ -250,19 +270,21 @@
         }
 
         Box(
-            Modifier.fillMaxSize().pointerInput(Unit) {
-                detectTapGestures(
-                    onDoubleTap = {
-                        // This creates a new `MutableTransitionState` object. When a new
-                        // `MutableTransitionState` object gets passed to `updateTransition`, a
-                        // new transition will be created. All existing values, velocities will
-                        // be lost as a result. Hence, in most cases, this is not recommended.
-                        // The exception is when it's more important to respond immediately to
-                        // user interaction than preserving continuity.
-                        transitionState = MutableTransitionState(LikedStates.Initial)
-                    }
-                )
-            }
+            Modifier
+                .fillMaxSize()
+                .pointerInput(Unit) {
+                    detectTapGestures(
+                        onDoubleTap = {
+                            // This creates a new `MutableTransitionState` object. When a new
+                            // `MutableTransitionState` object gets passed to `updateTransition`, a
+                            // new transition will be created. All existing values, velocities will
+                            // be lost as a result. Hence, in most cases, this is not recommended.
+                            // The exception is when it's more important to respond immediately to
+                            // user interaction than preserving continuity.
+                            transitionState = MutableTransitionState(LikedStates.Initial)
+                        }
+                    )
+                }
         ) {
             // This ensures sequential states: Initial -> Liked -> Disappeared
             if (transitionState.currentState == LikedStates.Initial) {
@@ -320,7 +342,8 @@
             Icon(
                 Icons.Filled.Favorite,
                 "Like",
-                Modifier.align(Alignment.Center)
+                Modifier
+                    .align(Alignment.Center)
                     .graphicsLayer(
                         alpha = alpha,
                         scaleX = scale,
@@ -343,7 +366,10 @@
         val scale by visibilityTransition.animateFloat { visible ->
             if (visible) 1f else 2f
         }
-        Box(modifier.scale(scale).background(Color.Black)) {
+        Box(
+            modifier
+                .scale(scale)
+                .background(Color.Black)) {
             // Content goes here
         }
     }
@@ -366,7 +392,10 @@
             }
 
             Box(
-                Modifier.align(Alignment.BottomCenter).widthIn(50.dp).heightIn(50.dp)
+                Modifier
+                    .align(Alignment.BottomCenter)
+                    .widthIn(50.dp)
+                    .heightIn(50.dp)
                     .clip(RoundedCornerShape(cornerRadius))
             ) {
                 NumberPad(
@@ -447,3 +476,71 @@
         }
     }
 }
+
+@OptIn(ExperimentalTransitionApi::class, ExperimentalAnimationApi::class)
+@Sampled
+@Composable
+fun SeekingAnimationSample() {
+    Column {
+        val seekingState = remember { SeekableTransitionState(SquareSize.Small, SquareSize.Large) }
+        val scope = rememberCoroutineScope()
+        Row {
+            Button(onClick = {
+                scope.launch {
+                    seekingState.animateToCurrentState()
+                }
+            }) {
+                Text("Small")
+            }
+            Slider(
+                value = seekingState.fraction,
+                modifier = Modifier
+                    .weight(1f)
+                    .padding(horizontal = 10.dp),
+                onValueChange = { value ->
+                    scope.launch {
+                        seekingState.snapToFraction(value)
+                    }
+                }
+            )
+            Button(onClick = {
+                scope.launch {
+                    seekingState.animateToTargetState()
+                }
+            }) {
+                Text("Large")
+            }
+        }
+        // enum class SquareSize { Small, Large }
+        val transition = rememberTransition(seekingState)
+
+        // Defines a float animation as a child animation the transition. The current animation value
+        // can be read from the returned State<Float>.
+        val scale: Float by transition.animateFloat(
+            // Defines a transition spec that uses the same low-stiffness spring for *all*
+            // transitions of this float, no matter what the target is.
+            transitionSpec = { tween(easing = LinearEasing) },
+            label = "Scale"
+        ) { state ->
+            // This code block declares a mapping from state to value.
+            if (state == SquareSize.Large) 3f else 1f
+        }
+
+        transition.AnimatedContent(transitionSpec = {
+            fadeIn(tween(easing = LinearEasing)) togetherWith fadeOut(tween(easing = LinearEasing))
+        }) { state ->
+            if (state == SquareSize.Large) {
+                Box(Modifier.size(50.dp).background(Color.Magenta))
+            } else {
+                Box(Modifier.size(50.dp))
+            }
+        }
+        Box(
+            Modifier
+                .fillMaxSize()
+                .wrapContentSize(Alignment.Center)
+                .size((100 * scale).dp)
+                .background(Color.Blue)
+        )
+    }
+}
diff --git a/compose/animation/animation-core/src/androidAndroidTest/kotlin/androidx/compose/animation/core/SeekableTransitionStateTest.kt b/compose/animation/animation-core/src/androidAndroidTest/kotlin/androidx/compose/animation/core/SeekableTransitionStateTest.kt
new file mode 100644
index 0000000..21205ac
--- /dev/null
+++ b/compose/animation/animation-core/src/androidAndroidTest/kotlin/androidx/compose/animation/core/SeekableTransitionStateTest.kt
@@ -0,0 +1,485 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.compose.animation.core
+
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.animation.togetherWith
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.mutableLongStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import kotlin.coroutines.CoroutineContext
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.async
+import kotlinx.coroutines.runBlocking
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@OptIn(ExperimentalTransitionApi::class)
+@RunWith(AndroidJUnit4::class)
+@MediumTest
+class SeekableTransitionStateTest {
+    @get:Rule
+    val rule = createComposeRule()
+
+    private enum class AnimStates {
+        From,
+        To
+    }
+
+    @Test
+    fun seekFraction() {
+        val seekableTransitionState = SeekableTransitionState(AnimStates.From, AnimStates.To)
+        var animatedValue by mutableIntStateOf(-1)
+
+        rule.setContent {
+            val transition = rememberTransition(seekableTransitionState, label = "Test")
+            animatedValue = transition.animateInt(
+                label = "Value",
+                transitionSpec = { tween(easing = LinearEasing) }
+            ) { state ->
+                when (state) {
+                    AnimStates.From -> 0
+                    AnimStates.To -> 1000
+                }
+            }.value
+        }
+        rule.runOnIdle {
+            assertEquals(0, animatedValue)
+            runBlocking {
+                seekableTransitionState.snapToFraction(0.5f)
+                assertEquals(0.5f, seekableTransitionState.fraction)
+            }
+        }
+        rule.runOnIdle {
+            assertEquals(500, animatedValue)
+            runBlocking {
+                seekableTransitionState.snapToFraction(1f)
+                assertEquals(1f, seekableTransitionState.fraction)
+            }
+        }
+        rule.runOnIdle {
+            assertEquals(1000, animatedValue)
+            runBlocking {
+                seekableTransitionState.snapToFraction(0.5f)
+                assertEquals(0.5f, seekableTransitionState.fraction)
+            }
+        }
+        rule.runOnIdle {
+            assertEquals(500, animatedValue)
+            runBlocking {
+                seekableTransitionState.snapToFraction(0f)
+                assertEquals(0f, seekableTransitionState.fraction)
+            }
+        }
+        rule.runOnIdle {
+            assertEquals(0, animatedValue)
+        }
+    }
+
+    @Test
+    fun changeTarget() {
+        var animatedValue by mutableIntStateOf(-1)
+        var duration by mutableLongStateOf(0)
+        var fromState by mutableStateOf(AnimStates.From)
+        var toState by mutableStateOf(AnimStates.To)
+        lateinit var seekableTransitionState: SeekableTransitionState<AnimStates>
+
+        rule.setContent {
+            seekableTransitionState = remember(fromState, toState) {
+                SeekableTransitionState(fromState, toState)
+            }
+            val transition = rememberTransition(seekableTransitionState, label = "Test")
+            animatedValue = transition.animateInt(label = "Value") { state ->
+                when (state) {
+                    AnimStates.From -> 0
+                    AnimStates.To -> 1000
+                }
+            }.value
+            duration = transition.totalDurationNanos
+        }
+
+        rule.runOnIdle {
+            assertEquals(0, animatedValue)
+            fromState = AnimStates.To
+            toState = AnimStates.From
+        }
+
+        rule.runOnIdle {
+            assertEquals(1000, animatedValue)
+            runBlocking {
+                seekableTransitionState.snapToFraction(0.5f)
+            }
+        }
+
+        rule.runOnIdle {
+            assertTrue(animatedValue > 0)
+            assertTrue(animatedValue < 1000)
+            fromState = AnimStates.From
+            toState = AnimStates.To
+        }
+        rule.runOnIdle {
+            assertEquals(0, animatedValue)
+        }
+    }
+
+    @Test
+    fun animateToTarget() {
+        var animatedValue by mutableIntStateOf(-1)
+        var duration by mutableLongStateOf(0)
+        val seekableTransitionState = SeekableTransitionState(AnimStates.From, AnimStates.To)
+        lateinit var coroutineContext: CoroutineContext
+        lateinit var coroutineScope: CoroutineScope
+
+        rule.mainClock.autoAdvance = false
+
+        rule.setContent {
+            coroutineScope = rememberCoroutineScope()
+            coroutineContext = coroutineScope.coroutineContext
+            val transition = rememberTransition(seekableTransitionState, label = "Test")
+            animatedValue = transition.animateInt(
+                label = "Value",
+                transitionSpec = { tween(easing = LinearEasing) }
+            ) { state ->
+                when (state) {
+                    AnimStates.From -> 0
+                    AnimStates.To -> 1000
+                }
+            }.value
+            duration = transition.totalDurationNanos
+        }
+
+        val deferred1 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToTargetState()
+        }
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame() // one frame to set the start time
+        rule.mainClock.advanceTimeByFrame()
+
+        var progressFraction = 0f
+        rule.runOnIdle {
+            assertTrue(seekableTransitionState.fraction > 0f)
+            progressFraction = seekableTransitionState.fraction
+        }
+
+        rule.mainClock.advanceTimeByFrame()
+        rule.runOnIdle {
+            assertTrue(seekableTransitionState.fraction > progressFraction)
+            progressFraction = seekableTransitionState.fraction
+        }
+
+        // interrupt the progress
+
+        runBlocking {
+            seekableTransitionState.snapToFraction(0.5f)
+        }
+
+        rule.mainClock.advanceTimeByFrame()
+
+        rule.runOnIdle {
+            assertTrue(deferred1.isCancelled)
+            // We've stopped animating after seeking
+            assertEquals(0.5f, seekableTransitionState.fraction)
+            assertEquals(500, animatedValue)
+        }
+
+        // continue from the same place
+        val deferred2 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToTargetState()
+        }
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame() // one frame to set the start time
+        rule.mainClock.advanceTimeByFrame()
+
+        rule.runOnIdle {
+            // We've stopped animating after seeking
+            assertTrue(seekableTransitionState.fraction > 0.5f)
+            assertTrue(seekableTransitionState.fraction < 1f)
+        }
+
+        rule.mainClock.advanceTimeBy(duration / 1000_000L)
+
+        rule.runOnIdle {
+            assertTrue(deferred2.isCompleted)
+            assertEquals(1f, seekableTransitionState.fraction, 0f)
+            assertEquals(1000, animatedValue)
+        }
+    }
+
+    @Test
+    fun animateToCurrent() {
+        var animatedValue by mutableIntStateOf(-1)
+        var duration by mutableLongStateOf(0)
+        val seekableTransitionState = SeekableTransitionState(AnimStates.From, AnimStates.To)
+        lateinit var coroutineContext: CoroutineContext
+        lateinit var coroutineScope: CoroutineScope
+
+        rule.mainClock.autoAdvance = false
+
+        rule.setContent {
+            coroutineScope = rememberCoroutineScope()
+            coroutineContext = coroutineScope.coroutineContext
+            val transition = rememberTransition(seekableTransitionState, label = "Test")
+            animatedValue = transition.animateInt(
+                label = "Value",
+                transitionSpec = { tween(easing = LinearEasing) }
+            ) { state ->
+                when (state) {
+                    AnimStates.From -> 0
+                    AnimStates.To -> 1000
+                }
+            }.value
+            duration = transition.totalDurationNanos
+        }
+
+        runBlocking {
+            // Go to the end
+            seekableTransitionState.snapToFraction(1f)
+        }
+
+        val deferred1 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToCurrentState()
+        }
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame() // one frame to set the start time
+        rule.mainClock.advanceTimeByFrame()
+
+        var progressFraction = 0f
+        rule.runOnIdle {
+            assertTrue(seekableTransitionState.fraction < 1f)
+            progressFraction = seekableTransitionState.fraction
+        }
+
+        rule.mainClock.advanceTimeByFrame()
+        rule.runOnIdle {
+            assertTrue(seekableTransitionState.fraction < progressFraction)
+            progressFraction = seekableTransitionState.fraction
+        }
+
+        // interrupt the progress
+        runBlocking {
+            seekableTransitionState.snapToFraction(0.5f)
+        }
+
+        rule.mainClock.advanceTimeByFrame()
+
+        rule.runOnIdle {
+            assertTrue(deferred1.isCancelled)
+            // We've stopped animating after seeking
+            assertEquals(0.5f, seekableTransitionState.fraction)
+            assertEquals(500, animatedValue)
+        }
+
+        // continue from the same place
+        val deferred2 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToCurrentState()
+        }
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame() // one frame to set the start time
+        rule.mainClock.advanceTimeByFrame()
+
+        rule.runOnIdle {
+            // We've stopped animating after seeking
+            assertTrue(seekableTransitionState.fraction < 0.5f)
+            assertTrue(seekableTransitionState.fraction > 0f)
+        }
+
+        rule.mainClock.advanceTimeBy(duration / 1000_000L)
+
+        rule.runOnIdle {
+            assertTrue(deferred2.isCompleted)
+            assertEquals(0f, seekableTransitionState.fraction, 0f)
+            assertEquals(0, animatedValue)
+        }
+    }
+
+    @Test
+    fun updatedTransition() {
+        var animatedValue by mutableIntStateOf(-1)
+        var duration = -1L
+        val seekableTransitionState = SeekableTransitionState(AnimStates.From, AnimStates.To)
+
+        rule.setContent {
+            val transition = rememberTransition(seekableTransitionState, label = "Test")
+            animatedValue = transition.animateInt(
+                label = "Value",
+                transitionSpec = { tween(durationMillis = 200, easing = LinearEasing) }
+            ) { state ->
+                when (state) {
+                    AnimStates.From -> 0
+                    AnimStates.To -> 1000
+                }
+            }.value
+            transition.AnimatedContent(transitionSpec = {
+                fadeIn(tween(durationMillis = 1000, easing = LinearEasing)) togetherWith
+                    fadeOut(tween(durationMillis = 1000, easing = LinearEasing))
+            }) { state ->
+                if (state == AnimStates.To) {
+                    Box(Modifier.size(100.dp))
+                }
+            }
+            duration = transition.totalDurationNanos
+        }
+
+        rule.runOnIdle {
+            assertEquals(1000_000_000L, duration)
+            assertEquals(0f, seekableTransitionState.fraction, 0f)
+        }
+
+        runBlocking {
+            // Go to the middle
+            seekableTransitionState.snapToFraction(0.5f)
+        }
+
+        rule.runOnIdle {
+            assertEquals(1000, animatedValue)
+            assertEquals(0.5f, seekableTransitionState.fraction)
+        }
+
+        runBlocking {
+            // Go to the end
+            seekableTransitionState.snapToFraction(1f)
+        }
+
+        rule.runOnIdle {
+            assertEquals(1000, animatedValue)
+            assertEquals(1f, seekableTransitionState.fraction)
+        }
+
+        runBlocking {
+            // Go back to part way through the animatedValue
+            seekableTransitionState.snapToFraction(0.1f)
+        }
+
+        rule.runOnIdle {
+            assertEquals(500, animatedValue)
+            assertEquals(0.1f, seekableTransitionState.fraction)
+        }
+    }
+
+    @Test
+    fun repeatAnimate() {
+        var animatedValue by mutableIntStateOf(-1)
+        val seekableTransitionState = SeekableTransitionState(AnimStates.From, AnimStates.To)
+        lateinit var coroutineContext: CoroutineContext
+        lateinit var coroutineScope: CoroutineScope
+
+        rule.mainClock.autoAdvance = false
+
+        rule.setContent {
+            coroutineScope = rememberCoroutineScope()
+            coroutineContext = coroutineScope.coroutineContext
+            val transition = rememberTransition(seekableTransitionState, label = "Test")
+            animatedValue = transition.animateInt(
+                label = "Value",
+                transitionSpec = { tween(easing = LinearEasing) }
+            ) { state ->
+                when (state) {
+                    AnimStates.From -> 0
+                    AnimStates.To -> 1000
+                }
+            }.value
+        }
+
+        val deferred1 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToTargetState()
+        }
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame() // one frame to set the start time
+        rule.mainClock.advanceTimeByFrame()
+
+        // Running the same animation again should cancel the existing one
+        val deferred2 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToTargetState()
+        }
+
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame()
+
+        assertTrue(deferred1.isCancelled)
+        assertFalse(deferred2.isCancelled)
+
+        // Changing the direction should cancel also
+        val deferred3 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToCurrentState()
+        }
+
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame()
+
+        assertTrue(deferred2.isCancelled)
+        assertFalse(deferred3.isCancelled)
+
+        // Change direction the other way should cancel also
+        val deferred4 = coroutineScope.async(coroutineContext) {
+            seekableTransitionState.animateToTargetState()
+        }
+
+        rule.waitForIdle() // wait for coroutine to run
+        rule.mainClock.advanceTimeByFrame()
+
+        assertTrue(deferred3.isCancelled)
+        assertFalse(deferred4.isCancelled)
+    }
+
+    @Test
+    fun segmentInitialized() {
+        var animatedValue by mutableIntStateOf(-1)
+        val seekableTransitionState = SeekableTransitionState(AnimStates.From, AnimStates.To)
+        lateinit var segment: Transition.Segment<AnimStates>
+
+        rule.setContent {
+            val transition = rememberTransition(seekableTransitionState, label = "Test")
+            animatedValue = transition.animateInt(
+                label = "Value",
+                transitionSpec = {
+                    if (initialState == targetState) {
+                        snap()
+                    } else {
+                        tween(easing = LinearEasing)
+                    }
+                }
+            ) { state ->
+                when (state) {
+                    AnimStates.From -> 0
+                    AnimStates.To -> 1000
+                }
+            }.value
+            segment = transition.segment
+        }
+
+        rule.runOnIdle {
+            assertEquals(AnimStates.From, segment.initialState)
+            assertEquals(AnimStates.To, segment.targetState)
+        }
+    }
+}
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Animation.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Animation.kt
index 613ac2b..f000d9c 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Animation.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Animation.kt
@@ -16,8 +16,6 @@
 
 package androidx.compose.animation.core
 
-import androidx.compose.animation.core.internal.JvmDefaultWithCompatibility
-
 /**
  * This interface provides a convenient way to query from an [VectorizedAnimationSpec] or
  * [FloatDecayAnimationSpec]: It spares the need to pass the starting conditions and in some cases
@@ -33,6 +31,7 @@
  * stateful and manage their own lifecycles.
  *
  * @see [Animatable]
+ * @see [rememberTransition]
  * @see [updateTransition]
  */
 @JvmDefaultWithCompatibility
@@ -177,6 +176,7 @@
  * @param initialVelocityVector the start velocity of the animation in the form of [AnimationVector]
  *
  * @see [Transition]
+ * @see [rememberTransition]
  * @see [updateTransition]
  * @see [Animatable]
  */
diff --git a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
index 17cfebe..cae02e2 100644
--- a/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
+++ b/compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
@@ -18,6 +18,7 @@
 
 package androidx.compose.animation.core
 
+import androidx.annotation.FloatRange
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.LaunchedEffect
@@ -31,6 +32,7 @@
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshots.SnapshotStateObserver
 import androidx.compose.runtime.withFrameNanos
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
@@ -39,6 +41,7 @@
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import kotlin.math.max
+import kotlin.math.roundToLong
 
 /**
  * This sets up a [Transition], and updates it with the target provided by [targetState]. When
@@ -49,7 +52,7 @@
  *
  * [label] is used to differentiate different transitions in Android Studio.
  *
- * __Note__: There is another [updateTransition] overload that accepts a [MutableTransitionState].
+ * __Note__: There is another [rememberTransition] overload that accepts a [MutableTransitionState].
  * The difference between the two is that the [MutableTransitionState] variant: 1) supports a
  * different initial state than target state (This would allow a transition to start as soon as
  * it enters composition.) 2) can be recreated to intentionally trigger a re-start of the
@@ -81,17 +84,51 @@
 
 internal const val AnimationDebugDurationScale = 1
 
+sealed class TransitionState<S> {
+    /**
+     * Current state of the transition. If there is an active transition, [currentState] and
+     * [targetState] are different.
+     */
+    abstract val currentState: S
+
+    /**
+     * Target state of the transition. If this is the same as [currentState], no transition is
+     * active.
+     */
+    abstract val targetState: S
+
+    // Updated from Transition
+    internal var isRunning: Boolean by mutableStateOf(false)
+    internal abstract fun transitionConfigured(transition: Transition<S>)
+}
+
+/**
+ * This is used to prevent exhaustive `when` from limiting the use of [TransitionState] to only
+ * [MutableState] and [SeekableTransitionState]. The developer must always have an `else`.
+ * It is unlikely to be a concern, but this will alleviate any worries about expanding the
+ * subclasses of [TransitionState].
+ */
+internal class PreventExhaustiveWhenTransitionState : TransitionState<Any?>() {
+    override val currentState: Any?
+        get() = null
+    override val targetState: Any?
+        get() = null
+
+    override fun transitionConfigured(transition: Transition<Any?>) {
+    }
+}
+
 /**
  * MutableTransitionState contains two fields: [currentState] and [targetState]. [currentState] is
  * initialized to the provided initialState, and can only be mutated by a [Transition].
  * [targetState] is also initialized to initialState. It can be mutated to alter the course of a
- * transition animation that is created with the [MutableTransitionState] using [updateTransition].
+ * transition animation that is created with the [MutableTransitionState] using [rememberTransition].
  * Both [currentState] and [targetState] are backed by a [State] object.
  *
  * @sample androidx.compose.animation.core.samples.InitialStateSample
- * @see updateTransition
+ * @see rememberTransition
  */
-class MutableTransitionState<S>(initialState: S) {
+class MutableTransitionState<S>(initialState: S) : TransitionState<S>() {
     /**
      * Current state of the transition. [currentState] is initialized to the initialState that the
      * [MutableTransitionState] is constructed with.
@@ -99,7 +136,7 @@
      * It will be updated by the Transition that is created with this [MutableTransitionState]
      * when the transition arrives at a new state.
      */
-    var currentState: S by mutableStateOf(initialState)
+    override var currentState: S by mutableStateOf(initialState)
         internal set
 
     /**
@@ -111,7 +148,7 @@
      * [Transition.targetState] to the same and subsequently starts a transition animation to
      * animate from the current values to the new target.
      */
-    var targetState: S by mutableStateOf(initialState)
+    override var targetState: S by mutableStateOf(initialState)
 
     /**
      * [isIdle] returns whether the transition has finished running. This will return false once
@@ -122,18 +159,137 @@
     val isIdle: Boolean
         get() = (currentState == targetState) && !isRunning
 
-    // Updated from Transition
-    internal var isRunning: Boolean by mutableStateOf(false)
+    override fun transitionConfigured(transition: Transition<S>) {
+    }
 }
 
 /**
- * Creates a [Transition] and puts it in the [currentState][MutableTransitionState.currentState] of
- * the provided [transitionState]. Whenever the [targetState][MutableTransitionState.targetState] of
- * the [transitionState] changes, the [Transition] will animate to the new target state.
+ * A [TransitionState] that can manipulate the progress of the [Transition] by seeking
+ * with [snapToFraction] or animating to the [targetState] with [animateToTargetState] or to the
+ * [currentState] with [animateToCurrentState].
+ *
+ * The progress of the animation is always reset to the start ([fraction] is 0) whenever
+ * [currentState] or [targetState] have changed.
+ *
+ * The transition will not progress until either [animateToTargetState] or [animateToCurrentState] is
+ * called.
+ *
+ * A [SeekableTransitionState] can only be used with one [Transition] instance. Once assigned,
+ * it cannot be reassigned to a different [Transition] instance.
+ * @sample androidx.compose.animation.core.samples.SeekingAnimationSample
+ */
+@ExperimentalTransitionApi
+class SeekableTransitionState<S>(
+    initialState: S,
+    override val targetState: S
+) : TransitionState<S>() {
+    /**
+     * The Transition that this is associated with. SeekableTransitionState can only be used
+     * with one Transition.
+     */
+    private var transition: Transition<S>? = null
+
+    private val animatedFraction = Animatable(0f).also {
+        it.updateBounds(lowerBound = 0f, upperBound = 1f)
+    }
+
+    private val observer = SnapshotStateObserver { it() }
+
+    override val currentState: S = initialState
+
+    /**
+     * The progress of the transition as a fraction of the entire duration. A value of 0
+     * indicates [currentState] and a value of 1 indicates [targetState].
+     */
+    @get:FloatRange(from = 0.0, to = 1.0)
+    val fraction: Float
+        get() = animatedFraction.value
+
+    /**
+     * Seek to a fraction of the Transition. A value of 0
+     * indicates [currentState] and a value of 1 indicates [targetState]. The fraction is based
+     * on the total duration of the transition. If animations are added or removed during the
+     * transition, the [Transition.totalDurationNanos] will change, so the same [fraction] value
+     * will snap to a different position in the transition.
+     */
+    suspend fun snapToFraction(@FloatRange(0.0, 1.0) fraction: Float) {
+        require(fraction in 0f..1f) {
+            "Expecting fraction between 0 and 1. Got $fraction"
+        }
+        if (currentState == targetState) {
+            return // setting the fraction doesn't matter if the states are the same
+        }
+        animatedFraction.snapTo(fraction)
+        seekToFraction()
+    }
+
+    /**
+     * Animates from the current fraction to the [targetState] (fraction = 1).
+     * @param animationSpec The [FiniteAnimationSpec] to use for animating the fraction. This
+     * defaults to a spring animation.
+     */
+    suspend fun animateToTargetState(
+        animationSpec: FiniteAnimationSpec<Float> = animatedFraction.defaultSpringSpec
+    ) {
+        if (transition == null || currentState == targetState) {
+            return
+        }
+
+        animatedFraction.animateTo(targetValue = 1f, animationSpec = animationSpec) {
+            seekToFraction()
+        }
+    }
+
+    /**
+     * Animates from the current fraction to the [currentState] (fraction = 0).
+     * @param animationSpec The [FiniteAnimationSpec] to use for animating the fraction. This
+     * defaults to a spring animation.
+     */
+    suspend fun animateToCurrentState(
+        animationSpec: FiniteAnimationSpec<Float> = animatedFraction.defaultSpringSpec
+    ) {
+        if (transition == null || currentState == targetState) {
+            return
+        }
+
+        animatedFraction.animateTo(targetValue = 0f, animationSpec = animationSpec) {
+            seekToFraction()
+        }
+    }
+
+    override fun transitionConfigured(transition: Transition<S>) {
+        check(this.transition == null || transition == this.transition) {
+            "An instance of SeekableTransitionState has been used in different Transitions. " +
+                "Previous instance: ${this.transition}, new instance: $transition"
+        }
+        this.transition = transition
+        seekToFraction()
+    }
+
+    private fun seekToFraction() {
+        val transition = transition ?: return
+        var duration = 0L
+        observer.observeReads(Unit, onValueChangedForScope = { seekToFraction() }) {
+            duration = transition.totalDurationNanos
+        }
+        val fraction = animatedFraction.value
+        val playTimeNanos = (fraction * duration).roundToLong()
+        transition.setPlaytimeAfterInitialAndTargetStateEstablished(
+            currentState,
+            targetState,
+            playTimeNanos
+        )
+    }
+}
+
+/**
+ * Creates a [Transition] and puts it in the [currentState][TransitionState.currentState] of
+ * the provided [transitionState]. If the [TransitionState.targetState] changes, the [Transition]
+ * will change where it will animate to.
  *
  * __Remember__: The provided [transitionState] needs to be [remember]ed.
  *
- * Compared to the [updateTransition] variant that takes a targetState, this function supports a
+ * Compared to [updateTransition] that takes a targetState, this function supports a
  * different initial state than the first targetState. Here is an example:
  *
  * @sample androidx.compose.animation.core.samples.InitialStateSample
@@ -144,10 +300,13 @@
  * change (e.g. in response to a user interaction). This can be achieved by creating a new
  * [transitionState]:
  * @sample androidx.compose.animation.core.samples.DoubleTapToLikeSample
+ *
+ * This is Experimental because it is targeted at supporting [SeekableTransitionState].
  */
+@ExperimentalTransitionApi // TODO: remove experimental reason and deprecate(HIDDEN) other API
 @Composable
-fun <T> updateTransition(
-    transitionState: MutableTransitionState<T>,
+fun <T> rememberTransition(
+    transitionState: TransitionState<T>,
     label: String? = null
 ): Transition<T> {
     val transition = remember(transitionState) {
@@ -165,6 +324,35 @@
 }
 
 /**
+ * Creates a [Transition] and puts it in the [currentState][MutableTransitionState.currentState] of
+ * the provided [transitionState]. Whenever the [targetState][MutableTransitionState.targetState] of
+ * the [transitionState] changes, the [Transition] will animate to the new target state.
+ *
+ * __Remember__: The provided [transitionState] needs to be [remember]ed.
+ *
+ * Compared to the [rememberTransition] variant that takes a targetState, this function supports a
+ * different initial state than the first targetState. Here is an example:
+ *
+ * @sample androidx.compose.animation.core.samples.InitialStateSample
+ *
+ * In most cases, it is recommended to reuse the same [transitionState] that is [remember]ed, such
+ * that [Transition] preserves continuity when [targetState][MutableTransitionState.targetState] is
+ * changed. However, in some rare cases it is more critical to immediately *snap* to a state
+ * change (e.g. in response to a user interaction). This can be achieved by creating a new
+ * [transitionState]:
+ * @sample androidx.compose.animation.core.samples.DoubleTapToLikeSample
+ */
+@OptIn(ExperimentalTransitionApi::class)
+@Composable
+fun <T> updateTransition(
+    transitionState: MutableTransitionState<T>,
+    label: String? = null
+): Transition<T> {
+    val state: TransitionState<T> = transitionState
+    return rememberTransition(state, label)
+}
+
+/**
  * [Transition] manages all the child animations on a state level. Child animations
  * can be created in a declarative way using [Transition.animateFloat], [Transition.animateValue],
  * [animateColor][androidx.compose.animation.animateColor] etc. When the [targetState] changes,
@@ -177,7 +365,7 @@
  *
  * @sample androidx.compose.animation.core.samples.GestureAnimationSample
  *
- * @see updateTransition
+ * @see rememberTransition
  * @see Transition.animateFloat
  * @see Transition.animateValue
  * @see androidx.compose.animation.animateColor
@@ -185,7 +373,7 @@
 // TODO: Support creating Transition outside of composition and support imperative use of Transition
 @Stable
 class Transition<S> @PublishedApi internal constructor(
-    private val transitionState: MutableTransitionState<S>,
+    private val transitionState: TransitionState<S>,
     val label: String? = null
 ) {
     internal constructor(
@@ -193,16 +381,19 @@
         label: String?
     ) : this(MutableTransitionState(initialState), label)
 
+    @PublishedApi
+    internal constructor(
+        transitionState: MutableTransitionState<S>,
+        label: String? = null
+    ) : this(transitionState as TransitionState<S>, label)
+
     /**
      * Current state of the transition. This will always be the initialState of the transition
      * until the transition is finished. Once the transition is finished, [currentState] will be
      * set to [targetState]. [currentState] is backed by a [MutableState].
      */
-    var currentState: S
+    val currentState: S
         get() = transitionState.currentState
-        internal set(value) {
-            transitionState.currentState = value
-        }
 
     /**
      * Target state of the transition. This will be read by all child animations to determine their
@@ -253,10 +444,11 @@
 
     // Seeking related
     /** @suppress */
+    @OptIn(ExperimentalTransitionApi::class)
     @InternalAnimationApi
     var isSeeking: Boolean by mutableStateOf(false)
         internal set
-    internal var lastSeekedTimeNanos: Long = 0L
+    internal var lastSeekedTimeNanos = 0L
 
     /**
      * Total duration of the [Transition], accounting for all the animations and child transitions
@@ -280,6 +472,7 @@
         maxDurationNanos
     }
 
+    @OptIn(InternalAnimationApi::class)
     internal fun onFrame(frameTimeNanos: Long, durationScale: Float) {
         if (startTimeNanos == AnimationConstants.UnspecifiedTime) {
             onTransitionStart(frameTimeNanos)
@@ -312,6 +505,10 @@
         }
     }
 
+    init {
+        transitionState.transitionConfigured(this)
+    }
+
     // onTransitionStart and onTransitionEnd are symmetric. Both are called from onFrame
     internal fun onTransitionStart(frameTimeNanos: Long) {
         startTimeNanos = frameTimeNanos
@@ -319,9 +516,12 @@
     }
 
     // onTransitionStart and onTransitionEnd are symmetric. Both are called from onFrame
+    @OptIn(InternalAnimationApi::class)
     internal fun onTransitionEnd() {
         startTimeNanos = AnimationConstants.UnspecifiedTime
-        currentState = targetState
+        if (transitionState is MutableTransitionState) {
+            transitionState.currentState = targetState
+        }
         playTimeNanos = 0
         transitionState.isRunning = false
     }
@@ -343,6 +543,7 @@
      * // TODO: Replace @suppress with @RestrictTo
      * @suppress
      */
+    @OptIn(InternalAnimationApi::class)
     @JvmName("seek")
     fun setPlaytimeAfterInitialAndTargetStateEstablished(
         initialState: S,
@@ -354,7 +555,9 @@
         transitionState.isRunning = false
         if (!isSeeking || this.currentState != initialState || this.targetState != targetState) {
             // Reset all child animations
-            this.currentState = initialState
+            if (currentState != initialState && transitionState is MutableTransitionState) {
+                transitionState.currentState = initialState
+            }
             this.targetState = targetState
             isSeeking = true
             segment = SegmentImpl(initialState, targetState)
@@ -394,6 +597,7 @@
 
     // This target state should only be used to modify "mutableState"s, as it could potentially
     // roll back. The
+    @OptIn(ExperimentalTransitionApi::class, InternalAnimationApi::class)
     @Suppress("ComposableNaming")
     @Composable
     internal fun updateTarget(targetState: S) {
@@ -403,7 +607,12 @@
             if (this.targetState != targetState) {
                 // Starting state should be the "next" state when waypoints are impl'ed
                 segment = SegmentImpl(this.targetState, targetState)
-                currentState = this.targetState
+                if (currentState != this.targetState) {
+                    check(transitionState is MutableTransitionState) {
+                        "Can only update the current state with MutableTransitionState"
+                    }
+                    transitionState.currentState = this.targetState
+                }
                 this.targetState = targetState
                 if (!isRunning) {
                     updateChildrenNeeded = true
@@ -419,6 +628,7 @@
 
     // This should only be called if PlayTime comes from clock directly, instead of from a parent
     // Transition.
+    @OptIn(InternalAnimationApi::class)
     @Suppress("ComposableNaming")
     @Composable
     internal fun animateTo(targetState: S) {
@@ -448,6 +658,7 @@
         return animations.fold("Transition animation values: ") { acc, anim -> "$acc$anim, " }
     }
 
+    @OptIn(InternalAnimationApi::class)
     private fun onChildAnimationUpdated() {
         updateChildrenNeeded = true
         if (isSeeking) {
@@ -574,6 +785,7 @@
         }
 
         // This gets called *during* composition
+        @OptIn(InternalAnimationApi::class)
         internal fun updateTargetValue(targetValue: T, animationSpec: FiniteAnimationSpec<T>) {
             if (this.targetValue != targetValue || needsReset) {
                 this.targetValue = targetValue
@@ -849,6 +1061,7 @@
  *
  * @return A [State] object, the value of which is updated by animation
  * @see updateTransition
+ * @see rememberTransition
  * @see Transition.animateFloat
  * @see androidx.compose.animation.animateColor
  */
@@ -932,6 +1145,7 @@
  * [label] is used to differentiate from other animations in the same transition in Android Studio.
  *
  * @return A [State] object, the value of which is updated by animation
+ * @see rememberTransition
  * @see updateTransition
  * @see Transition.animateValue
  * @see androidx.compose.animation.animateColor
diff --git a/compose/animation/animation-graphics/lint-baseline.xml b/compose/animation/animation-graphics/lint-baseline.xml
new file mode 100644
index 0000000..f4264ea
--- /dev/null
+++ b/compose/animation/animation-graphics/lint-baseline.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="PathParser.createPathFromPathData can only be called from within the same library (androidx.core:core)"
+        errorLine1="                    PathInterpolator(PathParser.createPathFromPathData(pathData)).toEasing()"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/animation/graphics/vector/compat/XmlAnimatorParser.android.kt"/>
+    </issue>
+
+</issues>
diff --git a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimationDemos.kt b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimationDemos.kt
index 9350274..0906082 100644
--- a/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimationDemos.kt
+++ b/compose/animation/animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimationDemos.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.animation.demos
 
+import androidx.compose.animation.core.samples.SeekingAnimationSample
 import androidx.compose.animation.demos.fancy.AnimatedClockDemo
 import androidx.compose.animation.demos.fancy.AnimatedDotsDemo
 import androidx.compose.animation.demos.fancy.ChatScreen
@@ -80,6 +81,7 @@
             listOf(
                 ComposableDemo("Double tap to like") { DoubleTapToLikeDemo() },
                 ComposableDemo("Gesture based animation") { GestureBasedAnimationDemo() },
+                ComposableDemo("Seeking animation") { SeekingAnimationSample() },
                 ComposableDemo("Infinite transition") { InfiniteTransitionDemo() },
                 ComposableDemo("Multi-dimensional prop") { MultiDimensionalAnimationDemo() },
                 ComposableDemo("Repeating rotation") { RepeatedRotationDemo() },
diff --git a/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt b/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
index c8084f3..2767e5aa 100644
--- a/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
+++ b/compose/animation/animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimatedContentTest.kt
@@ -56,6 +56,7 @@
 import androidx.compose.ui.layout.LookaheadScope
 import androidx.compose.ui.layout.SubcomposeLayout
 import androidx.compose.ui.layout.boundsInRoot
+import androidx.compose.ui.layout.layout
 import androidx.compose.ui.layout.onGloballyPositioned
 import androidx.compose.ui.layout.onPlaced
 import androidx.compose.ui.layout.positionInRoot
@@ -1253,6 +1254,51 @@
         assertTrue(box2EnterFinished)
     }
 
+    /**
+     * This test checks that scaleInToFitContainer and scaleOutToFitContainer handle empty
+     * content correctly.
+     */
+    @Test
+    fun testAnimateToEmptyComposable() {
+        var isEmpty by mutableStateOf(false)
+        var targetSize: IntSize? = null
+        rule.setContent {
+            CompositionLocalProvider(LocalDensity provides Density(1f)) {
+                AnimatedContent(targetState = isEmpty,
+                    transitionSpec = {
+                        scaleInToFitContainer() togetherWith scaleOutToFitContainer()
+                    },
+                    modifier = Modifier.layout { measurable, constraints ->
+                        measurable.measure(constraints).run {
+                            if (isLookingAhead) {
+                                targetSize = IntSize(width, height)
+                            }
+                            layout(width, height) {
+                                place(0, 0)
+                            }
+                        }
+                    }
+                ) {
+                    if (!it) {
+                        Box(Modifier.size(200.dp))
+                    }
+                }
+            }
+        }
+        rule.runOnIdle {
+            assertEquals(IntSize(200, 200), targetSize)
+            isEmpty = true
+        }
+
+        rule.runOnIdle {
+            assertEquals(IntSize.Zero, targetSize)
+            isEmpty = !isEmpty
+        }
+        rule.runOnIdle {
+            assertEquals(IntSize(200, 200), targetSize)
+        }
+    }
+
     @OptIn(InternalAnimationApi::class)
     private val Transition<*>.playTimeMillis get() = (playTimeNanos / 1_000_000L).toInt()
 }
diff --git a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedContent.kt b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedContent.kt
index da44816..94f9f66 100644
--- a/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedContent.kt
+++ b/compose/animation/animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedContent.kt
@@ -65,6 +65,7 @@
 import androidx.compose.ui.layout.MeasureScope
 import androidx.compose.ui.layout.ParentDataModifier
 import androidx.compose.ui.layout.Placeable
+import androidx.compose.ui.layout.ScaleFactor
 import androidx.compose.ui.layout.layout
 import androidx.compose.ui.node.LayoutModifierNode
 import androidx.compose.ui.node.ModifierNodeElement
@@ -1188,7 +1189,10 @@
             rootScope.currentSize
         }
         val resolvedScale =
-            contentScale.computeScaleFactor(contentSize.toSize(), sizeToReport.toSize())
+            if (contentSize.width == 0 || contentSize.height == 0) {
+                ScaleFactor(1f, 1f)
+            } else
+                contentScale.computeScaleFactor(contentSize.toSize(), sizeToReport.toSize())
         return layout(sizeToReport.width, sizeToReport.height) {
             val (x, y) = alignment.align(
                 IntSize(
diff --git a/compose/benchmark-utils/build.gradle b/compose/benchmark-utils/build.gradle
index 1ee2afbf5..33ecde5 100644
--- a/compose/benchmark-utils/build.gradle
+++ b/compose/benchmark-utils/build.gradle
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 plugins {
     id("AndroidXPlugin")
     id("com.android.library")
@@ -29,6 +31,7 @@
     implementation(libs.kotlinStdlibCommon)
     implementation(projectOrArtifact(":compose:runtime:runtime"))
     implementation(projectOrArtifact(":compose:ui:ui"))
+    implementation(project(":tracing:tracing-ktx"))
     implementation(libs.testRules)
 
     // This has stub APIs for access to legacy Android APIs, so we don't want
@@ -36,6 +39,15 @@
     compileOnly(projectOrArtifact(":compose:ui:ui-android-stubs"))
 }
 
+tasks.withType(KotlinCompile).configureEach {
+    it.kotlinOptions {
+        freeCompilerArgs += [
+                // Enable experimental benchmark APIs internally
+                "-opt-in=androidx.benchmark.ExperimentalBenchmarkConfigApi",
+        ]
+    }
+}
+
 android {
     namespace "androidx.compose.benchmarkutils"
 }
\ No newline at end of file
diff --git a/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/ComposeBenchmarkRule.kt b/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/ComposeBenchmarkRule.kt
index 5db4de8..be5b442 100644
--- a/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/ComposeBenchmarkRule.kt
+++ b/compose/benchmark-utils/src/main/java/androidx/compose/testutils/benchmark/ComposeBenchmarkRule.kt
@@ -17,6 +17,8 @@
 package androidx.compose.testutils.benchmark
 
 import androidx.activity.ComponentActivity
+import androidx.benchmark.ExperimentalBenchmarkConfigApi
+import androidx.benchmark.MicrobenchmarkConfig
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.benchmark.junit4.measureRepeated
 import androidx.compose.testutils.ComposeBenchmarkScope
@@ -32,12 +34,31 @@
 /**
  * Rule to be used to run Compose / Android benchmarks.
  */
-class ComposeBenchmarkRule : TestRule {
+@OptIn(ExperimentalBenchmarkConfigApi::class)
+class ComposeBenchmarkRule internal constructor(
+    // this is a hack to avoid exposing the config param to all callers,
+    // can change to optional when MicrobenchmarkConfig is non-experimental
+    internalConfig: MicrobenchmarkConfig? = null,
+    // used to differentiate signature for internal constructor
+    @Suppress("UNUSED_PARAMETER") ignored: Int = 0
+) : TestRule {
+
+    constructor(config: MicrobenchmarkConfig) : this(internalConfig = config)
+
+    // Explicit constructor without config arg
+    constructor() : this(internalConfig = null)
+
     @Suppress("DEPRECATION")
     private val activityTestRule =
         androidx.test.rule.ActivityTestRule(ComponentActivity::class.java)
 
-    val benchmarkRule = BenchmarkRule()
+    // We don't use the config default constructor as a default, as it overrides values from
+    // instrumentation args, which may be surprising
+    val benchmarkRule = if (internalConfig == null) {
+        BenchmarkRule()
+    } else {
+        BenchmarkRule(internalConfig)
+    }
 
     override fun apply(base: Statement, description: Description?): Statement {
         @OptIn(InternalTestApi::class)
diff --git a/compose/compiler/buildSrc b/compose/compiler/buildSrc
deleted file mode 120000
index da68aba..0000000
--- a/compose/compiler/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../../buildSrc
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/integration-tests/build.gradle b/compose/compiler/compiler-hosted/integration-tests/build.gradle
index 00a111c..eb02a70 100644
--- a/compose/compiler/compiler-hosted/integration-tests/build.gradle
+++ b/compose/compiler/compiler-hosted/integration-tests/build.gradle
@@ -75,9 +75,6 @@
     defaultConfig {
         minSdkVersion 21
     }
-    lintOptions {
-        disable("SyntheticAccessor")
-    }
     namespace "androidx.compose.runtime.tests"
 }
 
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
index af87416..11224652 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
@@ -24,11 +24,10 @@
 import com.intellij.openapi.util.io.FileUtil
 import java.io.File
 import java.net.URLClassLoader
+import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
 import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
 import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
 import org.jetbrains.kotlin.codegen.GeneratedClassLoader
-import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
-import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
 import org.jetbrains.kotlin.config.ApiVersion
 import org.jetbrains.kotlin.config.CompilerConfiguration
 import org.jetbrains.kotlin.config.JVMConfigurationKeys
@@ -108,7 +107,6 @@
 
     protected open fun CompilerConfiguration.updateConfiguration() {}
 
-    @OptIn(ExperimentalCompilerApi::class)
     private fun createCompilerFacade(
         additionalPaths: List<File> = listOf(),
         registerExtensions: (Project.(CompilerConfiguration) -> Unit)? = null
@@ -132,11 +130,11 @@
             configureJdkClasspathRoots()
         },
         registerExtensions = registerExtensions ?: { configuration ->
-            registerExtensionsForTest(this, configuration) {
-                with(ComposePluginRegistrar()) {
-                    registerExtensions(it)
-                }
-            }
+            ComposePluginRegistrar.registerCommonExtensions(this)
+            IrGenerationExtension.registerExtension(
+                this,
+                ComposePluginRegistrar.createComposeIrExtension(configuration)
+            )
         }
     )
 
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt
index 567728e..dd876b6 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLiveLiteralTransformTests.kt
@@ -22,8 +22,6 @@
 import org.intellij.lang.annotations.Language
 import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
-import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
-import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
 import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
 import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
 import org.junit.Assert.assertEquals
@@ -31,7 +29,6 @@
 abstract class AbstractLiveLiteralTransformTests(
     useFir: Boolean
 ) : AbstractIrTransformTest(useFir) {
-    @OptIn(ExperimentalCompilerApi::class)
     private fun computeKeys(files: List<SourceFile>): List<String> {
         var builtKeys = mutableSetOf<String>()
         compileToIr(
@@ -43,34 +40,32 @@
                 val liveLiteralsV2Enabled = configuration.getBoolean(
                     ComposeConfiguration.LIVE_LITERALS_V2_ENABLED_KEY
                 )
-                registerExtensionsForTest(this, configuration) {
-                    with(ComposePluginRegistrar) { registerCommonExtensions() }
-                    IrGenerationExtension.registerExtension(
-                        this@compileToIr,
-                        object : IrGenerationExtension {
-                            override fun generate(
-                                moduleFragment: IrModuleFragment,
-                                pluginContext: IrPluginContext
+                ComposePluginRegistrar.registerCommonExtensions(this)
+                IrGenerationExtension.registerExtension(
+                    this,
+                    object : IrGenerationExtension {
+                        override fun generate(
+                            moduleFragment: IrModuleFragment,
+                            pluginContext: IrPluginContext
+                        ) {
+                            val symbolRemapper = DeepCopySymbolRemapper()
+                            val keyVisitor = DurableKeyVisitor(builtKeys)
+                            val transformer = object : LiveLiteralTransformer(
+                                liveLiteralsEnabled || liveLiteralsV2Enabled,
+                                liveLiteralsV2Enabled,
+                                keyVisitor,
+                                pluginContext,
+                                symbolRemapper,
+                                ModuleMetricsImpl("temp")
                             ) {
-                                val symbolRemapper = DeepCopySymbolRemapper()
-                                val keyVisitor = DurableKeyVisitor(builtKeys)
-                                val transformer = object : LiveLiteralTransformer(
-                                    liveLiteralsEnabled || liveLiteralsV2Enabled,
-                                    liveLiteralsV2Enabled,
-                                    keyVisitor,
-                                    pluginContext,
-                                    symbolRemapper,
-                                    ModuleMetricsImpl("temp")
-                                ) {
-                                    override fun makeKeySet(): MutableSet<String> {
-                                        return super.makeKeySet().also { builtKeys = it }
-                                    }
+                                override fun makeKeySet(): MutableSet<String> {
+                                    return super.makeKeySet().also { builtKeys = it }
                                 }
-                                transformer.lower(moduleFragment)
                             }
+                            transformer.lower(moduleFragment)
                         }
-                    )
-                }
+                    }
+                )
             }
         )
         return builtKeys.toList()
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt
index 9e5d7ff..58edeee 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMetricsTransformTest.kt
@@ -19,12 +19,9 @@
 import androidx.compose.compiler.plugins.kotlin.facade.KotlinCompilerFacade
 import androidx.compose.compiler.plugins.kotlin.facade.SourceFile
 import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
-import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
-import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
 import org.junit.Assert.assertEquals
 
 abstract class AbstractMetricsTransformTest(useFir: Boolean) : AbstractIrTransformTest(useFir) {
-    @OptIn(ExperimentalCompilerApi::class)
     private fun verifyMetrics(
         source: String,
         verify: ModuleMetrics.() -> Unit
@@ -34,12 +31,10 @@
         compileToIr(
             files,
             registerExtensions = { configuration ->
-                registerExtensionsForTest(this, configuration) {
-                    with(ComposePluginRegistrar) { registerCommonExtensions() }
-                    val extension = ComposePluginRegistrar.createComposeIrExtension(configuration)
-                    extension.metrics = metrics
-                    IrGenerationExtension.registerExtension(extension)
-                }
+                ComposePluginRegistrar.registerCommonExtensions(this)
+                val extension = ComposePluginRegistrar.createComposeIrExtension(configuration)
+                extension.metrics = metrics
+                IrGenerationExtension.registerExtension(this, extension)
             }
         )
         metrics.verify()
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
index 29a2855..e439ae7 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
@@ -23,6 +23,7 @@
 import java.net.URLClassLoader
 import org.jetbrains.kotlin.backend.common.output.OutputFile
 import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
 import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
@@ -1106,6 +1107,63 @@
         )
     }
 
+    @Test
+    fun testFunctionInterfaceReturningComposable() {
+        compile(
+            mapOf(
+                "Base" to mapOf(
+                    "base/Base.kt" to """
+                    package base
+
+                    import androidx.compose.runtime.Composable
+
+                    fun interface Base {
+                        fun getContent(b: @Composable () -> Unit): @Composable () -> Unit
+                    }
+                    """
+                ),
+                "Main" to mapOf(
+                    "Main.kt" to """
+                    package main
+
+                    import base.Base
+
+                    val funInterfaceReturnComposable = Base {
+                        it
+                    }
+
+                    fun main() {
+                       funInterfaceReturnComposable.getContent {}
+                    }
+                    """
+                )
+            ),
+            validate = {
+                val indyExpr = Regex("INVOKEDYNAMIC.*?\\[([\\w\\W]*?)]").find(it)
+                val indyParams = indyExpr?.groupValues?.first()
+
+                assertTrue(
+                    "Could not find INVOKEDYNAMIC call",
+                    indyParams != null
+                )
+                assertEquals(
+                    indyParams!!.lines().joinToString("\n") { it.trimEnd() },
+                    """
+                        INVOKEDYNAMIC getContent()Lbase/Base; [
+                              // handle kind 0x6 : INVOKESTATIC
+                              java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles%Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
+                              // arguments:
+                              (Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2;,
+                              // handle kind 0x6 : INVOKESTATIC
+                              main/MainKt.funInterfaceReturnComposable%lambda%0(Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2;,
+                              (Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2;
+                            ]
+                    """.trimIndent()
+                )
+            },
+        )
+    }
+
     private fun compile(
         modules: Map<String, Map<String, String>>,
         dumpClasses: Boolean = false,
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
index 97aa89f..641ed7a 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
@@ -89,6 +89,7 @@
     private fun internalFqNameFor(cname: String) = FqName("$internalRoot.$cname")
     private fun composablesFqNameFor(cname: String) = fqNameFor("ComposablesKt.$cname")
 
+    val InternalPackage = internalRootFqName
     val Composable = ComposeClassIds.Composable.asSingleFqName()
     val ComposableTarget = ComposeClassIds.ComposableTarget.asSingleFqName()
     val ComposableTargetMarker = fqNameFor("ComposableTargetMarker")
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
index 07ea0ae..aafa9e2 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
@@ -23,6 +23,8 @@
 import androidx.compose.compiler.plugins.kotlin.k1.ComposeTypeResolutionInterceptorExtension
 import androidx.compose.compiler.plugins.kotlin.k2.ComposeFirExtensionRegistrar
 import androidx.compose.compiler.plugins.kotlin.lower.ClassStabilityFieldSerializationPlugin
+import com.intellij.mock.MockProject
+import com.intellij.openapi.project.Project
 import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
 import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
 import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
@@ -30,7 +32,6 @@
 import org.jetbrains.kotlin.compiler.plugin.CliOption
 import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
 import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
-import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
 import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
 import org.jetbrains.kotlin.config.CompilerConfiguration
 import org.jetbrains.kotlin.config.CompilerConfigurationKey
@@ -196,15 +197,21 @@
     }
 }
 
+@Suppress("DEPRECATION") // CompilerPluginRegistrar does not expose project (or disposable) causing
+                         // memory leaks, see: https://youtrack.jetbrains.com/issue/KT-60952
 @OptIn(ExperimentalCompilerApi::class)
-class ComposePluginRegistrar : CompilerPluginRegistrar() {
+class ComposePluginRegistrar : org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar {
     override val supportsK2: Boolean
         get() = true
 
-    override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
+    override fun registerProjectComponents(
+        project: MockProject,
+        configuration: CompilerConfiguration
+    ) {
         if (checkCompilerVersion(configuration)) {
-            registerCommonExtensions()
+            registerCommonExtensions(project)
             IrGenerationExtension.registerExtension(
+                project,
                 createComposeIrExtension(configuration)
             )
         }
@@ -288,20 +295,31 @@
             }
         }
 
-        fun ExtensionStorage.registerCommonExtensions() {
-            StorageComponentContainerContributor.registerExtension(ComposableCallChecker())
-            StorageComponentContainerContributor.registerExtension(ComposableDeclarationChecker())
-            StorageComponentContainerContributor.registerExtension(ComposableTargetChecker())
-            ComposeDiagnosticSuppressor.registerExtension(ComposeDiagnosticSuppressor())
+        fun registerCommonExtensions(project: Project) {
+            StorageComponentContainerContributor.registerExtension(
+                project,
+                ComposableCallChecker()
+            )
+            StorageComponentContainerContributor.registerExtension(
+                project,
+                ComposableDeclarationChecker()
+            )
+            StorageComponentContainerContributor.registerExtension(
+                project,
+                ComposableTargetChecker()
+            )
+            ComposeDiagnosticSuppressor.registerExtension(project, ComposeDiagnosticSuppressor())
             @Suppress("OPT_IN_USAGE_ERROR")
             TypeResolutionInterceptor.registerExtension(
+                project,
                 @Suppress("IllegalExperimentalApiUsage")
                 ComposeTypeResolutionInterceptorExtension()
             )
             DescriptorSerializerPlugin.registerExtension(
+                project,
                 ClassStabilityFieldSerializationPlugin()
             )
-            FirExtensionRegistrarAdapter.registerExtension(ComposeFirExtensionRegistrar())
+            FirExtensionRegistrarAdapter.registerExtension(project, ComposeFirExtensionRegistrar())
         }
 
         fun createComposeIrExtension(
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 c20d2da..6fc6792 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
@@ -127,7 +127,7 @@
          * The maven version string of this compiler. This string should be updated before/after every
          * release.
          */
-        const val compilerVersion: String = "1.5.1"
+        const val compilerVersion: String = "1.5.2"
         private val minimumRuntimeVersion: String
             get() = runtimeVersionToMavenVersionTable[minimumRuntimeVersionInt] ?: "unknown"
     }
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeDiagnosticSuppressor.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeDiagnosticSuppressor.kt
index af2523e..fc11167 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeDiagnosticSuppressor.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/k1/ComposeDiagnosticSuppressor.kt
@@ -17,6 +17,7 @@
 package androidx.compose.compiler.plugins.kotlin.k1
 
 import com.intellij.openapi.extensions.Extensions
+import com.intellij.openapi.project.Project
 import org.jetbrains.kotlin.diagnostics.Diagnostic
 import org.jetbrains.kotlin.diagnostics.Errors
 import org.jetbrains.kotlin.psi.KtAnnotatedExpression
@@ -30,11 +31,12 @@
 
     companion object {
         fun registerExtension(
+            project: Project,
             extension: DiagnosticSuppressor
         ) {
             @Suppress("DEPRECATION")
             Extensions.getRootArea().getExtensionPoint(DiagnosticSuppressor.EP_NAME)
-                .registerExtension(extension)
+                .registerExtension(extension, project)
         }
     }
 
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
index 88661dd..7d2ce82 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
@@ -23,7 +23,7 @@
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
 import org.jetbrains.kotlin.backend.common.peek
 import org.jetbrains.kotlin.backend.common.pop
-import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
+import org.jetbrains.kotlin.builtins.StandardNames
 import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
 import org.jetbrains.kotlin.ir.declarations.IrConstructor
 import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
@@ -36,6 +36,8 @@
 import org.jetbrains.kotlin.ir.expressions.IrCall
 import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
 import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
+import org.jetbrains.kotlin.ir.expressions.IrTypeOperator
+import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall
 import org.jetbrains.kotlin.ir.expressions.IrWhen
 import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
 import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
@@ -46,7 +48,7 @@
 import org.jetbrains.kotlin.ir.types.IrTypeAbbreviation
 import org.jetbrains.kotlin.ir.types.IrTypeArgument
 import org.jetbrains.kotlin.ir.types.IrTypeProjection
-import org.jetbrains.kotlin.ir.types.classifierOrNull
+import org.jetbrains.kotlin.ir.types.classOrNull
 import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
 import org.jetbrains.kotlin.ir.types.impl.IrTypeAbbreviationImpl
 import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
@@ -60,10 +62,12 @@
 import org.jetbrains.kotlin.ir.util.functions
 import org.jetbrains.kotlin.ir.util.hasAnnotation
 import org.jetbrains.kotlin.ir.util.isFunction
+import org.jetbrains.kotlin.ir.util.packageFqName
 import org.jetbrains.kotlin.ir.util.parentClassOrNull
 import org.jetbrains.kotlin.ir.util.patchDeclarationParents
 import org.jetbrains.kotlin.ir.util.remapTypes
 import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
+import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.types.Variance
 
 internal class DeepCopyIrTreeWithRemappedComposableTypes(
@@ -161,6 +165,44 @@
         return super.visitConstructorCall(expression)
     }
 
+    override fun visitTypeOperator(expression: IrTypeOperatorCall): IrTypeOperatorCall {
+        if (expression.operator != IrTypeOperator.SAM_CONVERSION) {
+            return super.visitTypeOperator(expression)
+        }
+
+        /*
+         * SAM_CONVERSION types from IR stubs are not remapped normally, as the fun interface is
+         * technically not a function type. This part goes over types involved in SAM_CONVERSION and
+         * ensures that parameter/return types of IR stubs are remapped correctly.
+         * Classes extending fun interfaces with composable types will be processed by visitFunction
+         * above as normal.
+         */
+        val type = expression.typeOperand
+        val clsSymbol = type.classOrNull ?: return super.visitTypeOperator(expression)
+
+        // Unbound symbols indicate they are in the current module and have not been
+        // processed by copier yet.
+        if (
+            clsSymbol.isBound &&
+                clsSymbol.owner.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB &&
+                // Only process fun interfaces with @Composable types
+                clsSymbol.owner.isFun &&
+                clsSymbol.functions.any { it.owner.needsComposableRemapping() }
+        ) {
+            // We always assume the current subtree has not been copied yet.
+            // If the old symbol is the same as in remapper, it means we never reached it, so
+            // we have to remap it now.
+            if (clsSymbol == symbolRemapper.getReferencedClass(clsSymbol)) {
+                symbolRemapper.visitClass(clsSymbol.owner)
+                clsSymbol.owner.transform().also {
+                    it.patchDeclarationParents(clsSymbol.owner.parent)
+                }
+            }
+        }
+
+        return super.visitTypeOperator(expression)
+    }
+
     private fun IrFunction.needsComposableRemapping(): Boolean {
         if (
             needsComposableRemapping(dispatchReceiverParameter?.type) ||
@@ -384,13 +426,13 @@
         scopeStack.pop()
     }
 
-    @OptIn(ObsoleteDescriptorBasedAPI::class)
     private fun IrType.isFunction(): Boolean {
-        val classifier = classifierOrNull ?: return false
-        val name = classifier.descriptor.name.asString()
+        val cls = classOrNull ?: return false
+        val name = cls.owner.name.asString()
         if (!name.startsWith("Function")) return false
-        classifier.descriptor.name
-        return true
+        val packageFqName = cls.owner.packageFqName
+        return packageFqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME ||
+            packageFqName == KotlinFunctionsBuiltInsPackageFqName
     }
 
     private fun IrType.isComposableFunction(): Boolean {
@@ -466,3 +508,7 @@
 
 private fun IrConstructorCall.isComposableAnnotation() =
     this.symbol.owner.parent.fqNameForIrSerialization == ComposeFqNames.Composable
+
+private val KotlinFunctionsBuiltInsPackageFqName = StandardNames.BUILT_INS_PACKAGE_FQ_NAME
+    .child(Name.identifier("jvm"))
+    .child(Name.identifier("functions"))
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt
index 3803019..852ae18 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrInlineReferenceLocator.kt
@@ -18,6 +18,7 @@
 package androidx.compose.compiler.plugins.kotlin.lower
 
 import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames.InternalPackage
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.ir.IrElement
 import org.jetbrains.kotlin.ir.declarations.IrConstructor
@@ -31,13 +32,14 @@
 import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
 import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
 import org.jetbrains.kotlin.ir.types.IrType
-import org.jetbrains.kotlin.ir.types.classFqName
+import org.jetbrains.kotlin.ir.types.classOrNull
 import org.jetbrains.kotlin.ir.types.isNullable
 import org.jetbrains.kotlin.ir.util.constructedClass
 import org.jetbrains.kotlin.ir.util.hasAnnotation
 import org.jetbrains.kotlin.ir.util.isFunction
 import org.jetbrains.kotlin.ir.util.isLambda
 import org.jetbrains.kotlin.ir.util.isSuspendFunction
+import org.jetbrains.kotlin.ir.util.packageFqName
 import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
 import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
 import org.jetbrains.kotlin.ir.visitors.acceptVoid
@@ -126,6 +128,7 @@
         (!type.isNullable() || defaultValue?.expression?.type?.isNullable() == false)
 
 fun IrType.isSyntheticComposableFunction() =
-    classFqName?.asString()?.startsWith(
-        "androidx.compose.runtime.internal.ComposableFunction"
-    ) == true
+    classOrNull?.owner?.let {
+        it.name.asString().startsWith("ComposableFunction") &&
+            it.packageFqName == InternalPackage
+    } ?: false
diff --git a/compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar b/compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
similarity index 100%
rename from compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
rename to compose/compiler/compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
diff --git a/compose/compiler/settings.gradle b/compose/compiler/settings.gradle
index 17e20e0..9b576d16 100644
--- a/compose/compiler/settings.gradle
+++ b/compose/compiler/settings.gradle
@@ -22,7 +22,7 @@
         }
         gradlePluginPortal()
     }
-    includeBuild "../../playground-common/playground-plugin"
+    apply from: "../../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
@@ -38,4 +38,3 @@
         return false
     })
 }
-
diff --git a/compose/foundation/foundation/api/current.ignore b/compose/foundation/foundation/api/current.ignore
deleted file mode 100644
index 2e4834c..0000000
--- a/compose/foundation/foundation/api/current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.compose.foundation.text.KeyboardOptions#KeyboardOptions(int, boolean, int, int):
-    Removed constructor androidx.compose.foundation.text.KeyboardOptions(int,boolean,int,int)
-RemovedMethod: androidx.compose.foundation.text.KeyboardOptions#copy(int, boolean, int, int):
-    Removed method androidx.compose.foundation.text.KeyboardOptions.copy(int,boolean,int,int)
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index 379421c..01ff795 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -1435,21 +1435,21 @@
 package androidx.compose.foundation.text2 {
 
   public final class BasicSecureTextFieldKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicSecureTextField(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,java.lang.Boolean>? onSubmit, optional int imeAction, optional int textObfuscationMode, optional int keyboardType, optional boolean enabled, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicSecureTextField(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,java.lang.Boolean>? onSubmit, optional int imeAction, optional int textObfuscationMode, optional int keyboardType, optional boolean enabled, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
   }
 
   public final class BasicTextField2Kt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
   }
 
 }
 
 package androidx.compose.foundation.text2.input {
 
-  public final class AllCapsFilterKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter allCaps(androidx.compose.foundation.text2.input.TextEditFilter.Companion, androidx.compose.ui.text.intl.Locale locale);
+  public final class AllCapsTransformationKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation allCaps(androidx.compose.foundation.text2.input.InputTransformation.Companion, androidx.compose.ui.text.intl.Locale locale);
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public fun interface CodepointTransformation {
@@ -1464,30 +1464,32 @@
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.CodepointTransformation mask(androidx.compose.foundation.text2.input.CodepointTransformation.Companion, char character);
   }
 
-  public final class MaxLengthFilterKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter maxLengthInChars(androidx.compose.foundation.text2.input.TextEditFilter.Companion, int maxLength);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter maxLengthInCodepoints(androidx.compose.foundation.text2.input.TextEditFilter.Companion, int maxLength);
-  }
-
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public fun interface TextEditFilter {
-    method public void filter(androidx.compose.foundation.text2.input.TextFieldCharSequence originalValue, androidx.compose.foundation.text2.input.TextFieldBuffer valueWithChanges);
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public fun interface InputTransformation {
     method public default androidx.compose.foundation.text.KeyboardOptions? getKeyboardOptions();
+    method public void transformInput(androidx.compose.foundation.text2.input.TextFieldCharSequence originalValue, androidx.compose.foundation.text2.input.TextFieldBuffer valueWithChanges);
     property public default androidx.compose.foundation.text.KeyboardOptions? keyboardOptions;
-    field public static final androidx.compose.foundation.text2.input.TextEditFilter.Companion Companion;
+    field public static final androidx.compose.foundation.text2.input.InputTransformation.Companion Companion;
   }
 
-  public static final class TextEditFilter.Companion {
+  public static final class InputTransformation.Companion {
   }
 
-  public final class TextEditFilterKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter then(androidx.compose.foundation.text2.input.TextEditFilter, androidx.compose.foundation.text2.input.TextEditFilter next, optional androidx.compose.foundation.text.KeyboardOptions? keyboardOptions);
+  public final class InputTransformationKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation then(androidx.compose.foundation.text2.input.InputTransformation, androidx.compose.foundation.text2.input.InputTransformation next);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation? thenOrNull(androidx.compose.foundation.text2.input.InputTransformation?, androidx.compose.foundation.text2.input.InputTransformation? next);
   }
 
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class TextFieldBuffer implements java.lang.Appendable java.lang.CharSequence {
+  public final class MaxLengthTransformationKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation maxLengthInChars(androidx.compose.foundation.text2.input.InputTransformation.Companion, int maxLength);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation maxLengthInCodepoints(androidx.compose.foundation.text2.input.InputTransformation.Companion, int maxLength);
+  }
+
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class TextFieldBuffer implements java.lang.Appendable {
     method public Appendable append(char char);
     method public Appendable append(CharSequence? text);
     method public Appendable append(CharSequence? text, int start, int end);
-    method public operator char get(int index);
+    method public CharSequence asCharSequence();
+    method public char charAt(int index);
     method public androidx.compose.foundation.text2.input.TextFieldBuffer.ChangeList getChanges();
     method public int getCodepointLength();
     method public int getLength();
@@ -1502,11 +1504,10 @@
     method public void revertAllChanges();
     method public void selectCharsIn(long range);
     method public void selectCodepointsIn(long range);
-    method public CharSequence subSequence(int startIndex, int endIndex);
     property public final androidx.compose.foundation.text2.input.TextFieldBuffer.ChangeList changes;
     property public final int codepointLength;
     property public final boolean hasSelection;
-    property public int length;
+    property public final int length;
     property public final long selectionInChars;
     property public final long selectionInCodepoints;
   }
diff --git a/compose/foundation/foundation/api/restricted_current.ignore b/compose/foundation/foundation/api/restricted_current.ignore
deleted file mode 100644
index 2e4834c..0000000
--- a/compose/foundation/foundation/api/restricted_current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.compose.foundation.text.KeyboardOptions#KeyboardOptions(int, boolean, int, int):
-    Removed constructor androidx.compose.foundation.text.KeyboardOptions(int,boolean,int,int)
-RemovedMethod: androidx.compose.foundation.text.KeyboardOptions#copy(int, boolean, int, int):
-    Removed method androidx.compose.foundation.text.KeyboardOptions.copy(int,boolean,int,int)
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 4c34606..4924e60 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -1437,21 +1437,21 @@
 package androidx.compose.foundation.text2 {
 
   public final class BasicSecureTextFieldKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicSecureTextField(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,java.lang.Boolean>? onSubmit, optional int imeAction, optional int textObfuscationMode, optional int keyboardType, optional boolean enabled, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicSecureTextField(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,java.lang.Boolean>? onSubmit, optional int imeAction, optional int textObfuscationMode, optional int keyboardType, optional boolean enabled, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
   }
 
   public final class BasicTextField2Kt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.TextEditFilter? filter, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.foundation.text2.input.TextFieldState state, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BasicTextField2(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean readOnly, optional androidx.compose.foundation.text2.input.InputTransformation? inputTransformation, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.text.KeyboardOptions keyboardOptions, optional androidx.compose.foundation.text.KeyboardActions keyboardActions, optional androidx.compose.foundation.text2.input.TextFieldLineLimits lineLimits, optional kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super kotlin.jvm.functions.Function0<androidx.compose.ui.text.TextLayoutResult>,kotlin.Unit> onTextLayout, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional androidx.compose.ui.graphics.Brush cursorBrush, optional androidx.compose.foundation.text2.input.CodepointTransformation? codepointTransformation, optional kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> decorationBox, optional androidx.compose.foundation.ScrollState scrollState);
   }
 
 }
 
 package androidx.compose.foundation.text2.input {
 
-  public final class AllCapsFilterKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter allCaps(androidx.compose.foundation.text2.input.TextEditFilter.Companion, androidx.compose.ui.text.intl.Locale locale);
+  public final class AllCapsTransformationKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation allCaps(androidx.compose.foundation.text2.input.InputTransformation.Companion, androidx.compose.ui.text.intl.Locale locale);
   }
 
   @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public fun interface CodepointTransformation {
@@ -1466,30 +1466,32 @@
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.CodepointTransformation mask(androidx.compose.foundation.text2.input.CodepointTransformation.Companion, char character);
   }
 
-  public final class MaxLengthFilterKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter maxLengthInChars(androidx.compose.foundation.text2.input.TextEditFilter.Companion, int maxLength);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter maxLengthInCodepoints(androidx.compose.foundation.text2.input.TextEditFilter.Companion, int maxLength);
-  }
-
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public fun interface TextEditFilter {
-    method public void filter(androidx.compose.foundation.text2.input.TextFieldCharSequence originalValue, androidx.compose.foundation.text2.input.TextFieldBuffer valueWithChanges);
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public fun interface InputTransformation {
     method public default androidx.compose.foundation.text.KeyboardOptions? getKeyboardOptions();
+    method public void transformInput(androidx.compose.foundation.text2.input.TextFieldCharSequence originalValue, androidx.compose.foundation.text2.input.TextFieldBuffer valueWithChanges);
     property public default androidx.compose.foundation.text.KeyboardOptions? keyboardOptions;
-    field public static final androidx.compose.foundation.text2.input.TextEditFilter.Companion Companion;
+    field public static final androidx.compose.foundation.text2.input.InputTransformation.Companion Companion;
   }
 
-  public static final class TextEditFilter.Companion {
+  public static final class InputTransformation.Companion {
   }
 
-  public final class TextEditFilterKt {
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.TextEditFilter then(androidx.compose.foundation.text2.input.TextEditFilter, androidx.compose.foundation.text2.input.TextEditFilter next, optional androidx.compose.foundation.text.KeyboardOptions? keyboardOptions);
+  public final class InputTransformationKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation then(androidx.compose.foundation.text2.input.InputTransformation, androidx.compose.foundation.text2.input.InputTransformation next);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation? thenOrNull(androidx.compose.foundation.text2.input.InputTransformation?, androidx.compose.foundation.text2.input.InputTransformation? next);
   }
 
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class TextFieldBuffer implements java.lang.Appendable java.lang.CharSequence {
+  public final class MaxLengthTransformationKt {
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation maxLengthInChars(androidx.compose.foundation.text2.input.InputTransformation.Companion, int maxLength);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Stable public static androidx.compose.foundation.text2.input.InputTransformation maxLengthInCodepoints(androidx.compose.foundation.text2.input.InputTransformation.Companion, int maxLength);
+  }
+
+  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public final class TextFieldBuffer implements java.lang.Appendable {
     method public Appendable append(char char);
     method public Appendable append(CharSequence? text);
     method public Appendable append(CharSequence? text, int start, int end);
-    method public operator char get(int index);
+    method public CharSequence asCharSequence();
+    method public char charAt(int index);
     method public androidx.compose.foundation.text2.input.TextFieldBuffer.ChangeList getChanges();
     method public int getCodepointLength();
     method public int getLength();
@@ -1504,11 +1506,10 @@
     method public void revertAllChanges();
     method public void selectCharsIn(long range);
     method public void selectCodepointsIn(long range);
-    method public CharSequence subSequence(int startIndex, int endIndex);
     property public final androidx.compose.foundation.text2.input.TextFieldBuffer.ChangeList changes;
     property public final int codepointLength;
     property public final boolean hasSelection;
-    property public int length;
+    property public final int length;
     property public final long selectionInChars;
     property public final long selectionInCodepoints;
   }
diff --git a/compose/foundation/foundation/benchmark/build.gradle b/compose/foundation/foundation/benchmark/build.gradle
index 8a2d505..4bc25b5 100644
--- a/compose/foundation/foundation/benchmark/build.gradle
+++ b/compose/foundation/foundation/benchmark/build.gradle
@@ -15,6 +15,7 @@
  */
 
 import androidx.build.LibraryType
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
     id("AndroidXPlugin")
@@ -41,6 +42,15 @@
     androidTestImplementation(libs.truth)
 }
 
+tasks.withType(KotlinCompile).configureEach {
+    it.kotlinOptions {
+        freeCompilerArgs += [
+                // Enable experimental benchmark APIs internally
+                "-opt-in=androidx.benchmark.ExperimentalBenchmarkConfigApi",
+        ]
+    }
+}
+
 android {
     namespace "androidx.compose.foundation.benchmark"
     defaultConfig {
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicSecureTextFieldDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicSecureTextFieldDemos.kt
index 1da74a7..c8d01b0 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicSecureTextFieldDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicSecureTextFieldDemos.kt
@@ -89,8 +89,8 @@
     val state = remember { TextFieldState() }
     BasicSecureTextField(
         state = state,
-        filter = { _, new ->
-            if (!new.isDigitsOnly()) {
+        inputTransformation = { _, new ->
+            if (!new.asCharSequence().isDigitsOnly()) {
                 new.revertAllChanges()
             }
         },
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2CustomPinFieldDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2CustomPinFieldDemo.kt
index 117335b..b665cb2 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2CustomPinFieldDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2CustomPinFieldDemo.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text2.BasicTextField2
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldBuffer
 import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldState
@@ -158,21 +158,21 @@
     }
 
     /*internal*/ val textState = TextFieldState()
-    /*internal*/ val filter: TextEditFilter = OnlyDigitsFilter.then(
-        TextEditFilter.maxLengthInChars(maxDigits),
-        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.NumberPassword)
-    )
+    /*internal*/ val filter: InputTransformation = OnlyDigitsTransformation
+        .then(InputTransformation.maxLengthInChars(maxDigits))
 
     fun clear() {
         textState.clearText()
     }
 
-    private object OnlyDigitsFilter : TextEditFilter {
-        override fun filter(
+    private object OnlyDigitsTransformation : InputTransformation {
+        override val keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.NumberPassword)
+
+        override fun transformInput(
             originalValue: TextFieldCharSequence,
             valueWithChanges: TextFieldBuffer
         ) {
-            if (!valueWithChanges.isDigitsOnly()) {
+            if (!valueWithChanges.asCharSequence().isDigitsOnly()) {
                 valueWithChanges.revertAllChanges()
             }
         }
@@ -190,17 +190,18 @@
 
     BasicTextField2(
         state = state.textState,
-        filter = state.filter,
+        inputTransformation = state.filter,
         modifier = modifier
             .border(1.dp, contentColor, RoundedCornerShape(8.dp))
             .padding(8.dp),
-        enabled = enabled
-    ) {
-        CompositionLocalProvider(LocalContentAlpha provides contentAlpha) {
-            // Ignore inner field, we'll draw it ourselves.
-            PinContents(state)
+        enabled = enabled,
+        decorationBox = {
+            CompositionLocalProvider(LocalContentAlpha provides contentAlpha) {
+                // Ignore inner field, we'll draw it ourselves.
+                PinContents(state)
+            }
         }
-    }
+    )
 }
 
 @Composable
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
index d394e9e..749c2d79 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/BasicTextField2FilterDemos.kt
@@ -31,7 +31,7 @@
 import androidx.compose.foundation.samples.BasicTextField2CustomFilterSample
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text2.BasicTextField2
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldBuffer
 import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldState
@@ -58,10 +58,10 @@
             .verticalScroll(rememberScrollState())
     ) {
         TagLine(tag = "allCaps")
-        FilterDemo(filter = TextEditFilter.allCaps(Locale.current))
+        FilterDemo(filter = InputTransformation.allCaps(Locale.current))
 
         TagLine(tag = "maxLength(5)")
-        FilterDemo(filter = TextEditFilter.maxLengthInChars(5))
+        FilterDemo(filter = InputTransformation.maxLengthInChars(5))
 
         TagLine(tag = "Digits Only BasicTextField2")
         DigitsOnlyDemo()
@@ -89,16 +89,16 @@
 @OptIn(ExperimentalFoundationApi::class)
 @Composable
 private fun DigitsOnlyDemo() {
-    FilterDemo(filter = object : TextEditFilter {
+    FilterDemo(filter = object : InputTransformation {
         override val keyboardOptions = KeyboardOptions(
             keyboardType = KeyboardType.Number
         )
 
-        override fun filter(
+        override fun transformInput(
             originalValue: TextFieldCharSequence,
             valueWithChanges: TextFieldBuffer
         ) {
-            if (!valueWithChanges.isDigitsOnly()) {
+            if (!valueWithChanges.asCharSequence().isDigitsOnly()) {
                 valueWithChanges.revertAllChanges()
             }
         }
@@ -106,30 +106,30 @@
 }
 
 @Composable
-private fun FilterDemo(filter: TextEditFilter) {
+private fun FilterDemo(filter: InputTransformation) {
     val state = remember { TextFieldState() }
     BasicTextField2(
         state = state,
-        filter = filter,
+        inputTransformation = filter,
         modifier = demoTextFieldModifiers
     )
 }
 
 @Composable
 private fun ChangeFilterDemo() {
-    var filter: TextEditFilter? by remember { mutableStateOf(null) }
+    var filter: InputTransformation? by remember { mutableStateOf(null) }
     val state = remember { TextFieldState() }
 
     Column {
         Row(horizontalArrangement = Arrangement.SpaceBetween) {
             Text("Filter enabled?")
             Switch(checked = filter != null, onCheckedChange = {
-                filter = if (filter == null) TextEditFilter.allCaps(Locale.current) else null
+                filter = if (filter == null) InputTransformation.allCaps(Locale.current) else null
             })
         }
         BasicTextField2(
             state = state,
-            filter = filter,
+            inputTransformation = filter,
             modifier = demoTextFieldModifiers
         )
     }
diff --git a/compose/foundation/foundation/lint-baseline.xml b/compose/foundation/foundation/lint-baseline.xml
index 220f977..21f098b 100644
--- a/compose/foundation/foundation/lint-baseline.xml
+++ b/compose/foundation/foundation/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="NewApi"
@@ -552,15 +552,6 @@
 
     <issue
         id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in method LazyGrid has parameter &apos;slots&apos; with type Function2&lt;? super Density, ? super Constraints, LazyGridSlots>."
-        errorLine1="    slots: Density.(Constraints) -> LazyGridSlots,"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in variable &apos;measurePolicy&apos; with type Function2&lt;? super LazyLayoutMeasureScope, ? super Constraints, ? extends MeasureResult>."
         errorLine1="    val measurePolicy = rememberLazyGridMeasurePolicy("
         errorLine2="    ^">
@@ -579,15 +570,6 @@
 
     <issue
         id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in method rememberLazyGridMeasurePolicy has parameter &apos;slots&apos; with type Function2&lt;? super Density, ? super Constraints, LazyGridSlots>."
-        errorLine1="    slots: Density.(Constraints) -> LazyGridSlots,"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGrid.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in variable &apos;lineOf&apos; with type Function1&lt;? super Integer, ? extends Integer>."
         errorLine1="        val lineOf: (Int) -> Int = {"
         errorLine2="                    ~~~~~~~~~~~~">
@@ -597,24 +579,6 @@
 
     <issue
         id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in return type Function2&lt;Density, Constraints, LazyGridSlots> of &apos;rememberColumnWidthSums&apos;."
-        errorLine1="private fun rememberColumnWidthSums("
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridDsl.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in return type Function2&lt;Density, Constraints, LazyGridSlots> of &apos;rememberRowHeightSums&apos;."
-        errorLine1="private fun rememberRowHeightSums("
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridDsl.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in constructor GridSlotCache has parameter &apos;calculation&apos; with type Function2&lt;? super Density, ? super Constraints, LazyGridSlots>."
         errorLine1="    private val calculation: Density.(Constraints) -> LazyGridSlots"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -1092,15 +1056,6 @@
 
     <issue
         id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in method LazyStaggeredGrid has parameter &apos;slots&apos; with type Function2&lt;? super Density, ? super Constraints, LazyStaggeredGridSlots>."
-        errorLine1="    slots: Density.(Constraints) -> LazyStaggeredGridSlots,"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGrid.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in variable &apos;measurePolicy&apos; with type Function2&lt;? super LazyLayoutMeasureScope, ? super Constraints, ? extends LazyStaggeredGridMeasureResult>."
         errorLine1="    val measurePolicy = rememberStaggeredGridMeasurePolicy("
         errorLine2="    ^">
@@ -1110,24 +1065,6 @@
 
     <issue
         id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in return type Function2&lt;Density, Constraints, LazyStaggeredGridSlots> of &apos;rememberColumnSlots&apos;."
-        errorLine1="private fun rememberColumnSlots("
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridDsl.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in return type Function2&lt;Density, Constraints, LazyStaggeredGridSlots> of &apos;rememberRowSlots&apos;."
-        errorLine1="private fun rememberRowSlots("
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridDsl.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in constructor LazyStaggeredGridSlotCache has parameter &apos;calculation&apos; with type Function2&lt;? super Density, ? super Constraints, LazyStaggeredGridSlots>."
         errorLine1="    private val calculation: Density.(Constraints) -> LazyStaggeredGridSlots"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -1272,15 +1209,6 @@
 
     <issue
         id="PrimitiveInLambda"
-        message="Use a functional interface instead of lambda syntax for lambdas with primitive values in method rememberStaggeredGridMeasurePolicy has parameter &apos;slots&apos; with type Function2&lt;? super Density, ? super Constraints, LazyStaggeredGridSlots>."
-        errorLine1="    slots: Density.(Constraints) -> LazyStaggeredGridSlots"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridMeasurePolicy.kt"/>
-    </issue>
-
-    <issue
-        id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in return type Function2&lt;LazyLayoutMeasureScope, Constraints, LazyStaggeredGridMeasureResult> of &apos;rememberStaggeredGridMeasurePolicy&apos;."
         errorLine1="): LazyLayoutMeasureScope.(Constraints) -> LazyStaggeredGridMeasureResult = remember("
         errorLine2="   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
index 5164a0f..7af13ab 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/BasicTextField2Samples.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.text2.BasicTextField2
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.foundation.text2.input.delete
 import androidx.compose.foundation.text2.input.forEachChange
@@ -162,11 +162,12 @@
     }
 }
 
+// TODO convert to InputTransformation
 @Sampled
 @Composable
 fun BasicTextField2CustomFilterSample() {
     val state = remember { TextFieldState() }
-    BasicTextField2(state, filter = { _, new ->
+    BasicTextField2(state, inputTransformation = { _, new ->
         // A filter that always places newly-input text at the start of the string, after a
         // prompt character, like a shell.
         val promptChar = '>'
@@ -178,7 +179,7 @@
         }
 
         // Step one: Figure out the insertion point.
-        val newPromptChars = new.countPrefix(promptChar)
+        val newPromptChars = new.asCharSequence().countPrefix(promptChar)
         val insertionPoint = if (newPromptChars == 0) 0 else 1
 
         // Step two: Ensure text is placed at the insertion point.
@@ -204,14 +205,14 @@
 
 @Sampled
 fun BasicTextField2FilterChainingSample() {
-    val removeFirstEFilter = TextEditFilter { _, new ->
-        val index = new.indexOf('e')
+    val removeFirstEFilter = InputTransformation { _, new ->
+        val index = new.asCharSequence().indexOf('e')
         if (index != -1) {
             new.replace(index, index + 1, "")
         }
     }
-    val printECountFilter = TextEditFilter { _, new ->
-        println("found ${new.count { it == 'e' }} 'e's in the string")
+    val printECountFilter = InputTransformation { _, new ->
+        println("found ${new.asCharSequence().count { it == 'e' }} 'e's in the string")
     }
 
     // Returns a filter that always prints 0 e's.
@@ -225,9 +226,9 @@
 @Composable
 fun BasicTextField2ChangeIterationSample() {
     // Print a log message every time the text is changed.
-    BasicTextField2(state = rememberTextFieldState(), filter = { _, new ->
+    BasicTextField2(state = rememberTextFieldState(), inputTransformation = { _, new ->
         new.changes.forEachChange { sourceRange, replacedLength ->
-            val newString = new.substring(sourceRange)
+            val newString = new.asCharSequence().substring(sourceRange)
             println("""$replacedLength characters were replaced with "$newString"""")
         }
     })
@@ -238,7 +239,7 @@
 fun BasicTextField2ChangeReverseIterationSample() {
     // Make a text field behave in "insert mode" – inserted text overwrites the text ahead of it
     // instead of being inserted.
-    BasicTextField2(state = rememberTextFieldState(), filter = { _, new ->
+    BasicTextField2(state = rememberTextFieldState(), inputTransformation = { _, new ->
         new.changes.forEachChangeReversed { range, originalRange ->
             if (!range.collapsed && originalRange.collapsed) {
                 // New text was inserted, delete the text ahead of it.
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2ImmIntegrationTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2ImmIntegrationTest.kt
index ea979e4..d1dd4980 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2ImmIntegrationTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2ImmIntegrationTest.kt
@@ -231,7 +231,7 @@
             BasicTextField2(
                 state = state,
                 modifier = Modifier.testTag(Tag),
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     // Force the selection not to change.
                     val initialSelection = new.selectionInChars
                     new.append("world")
@@ -264,7 +264,7 @@
             BasicTextField2(
                 state = state,
                 modifier = Modifier.testTag(Tag),
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     val initialSelection = new.selectionInChars
                     new.append("world")
                     new.selectCharsIn(initialSelection)
@@ -293,7 +293,7 @@
             BasicTextField2(
                 state = state,
                 modifier = Modifier.testTag(Tag),
-                filter = { _, new -> new.selectAll() }
+                inputTransformation = { _, new -> new.selectAll() }
             )
         }
         requestFocus(Tag)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
index 53c86f77..0cc7865 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
@@ -7,10 +7,10 @@
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text.selection.fetchTextLayoutResult
 import androidx.compose.foundation.text.selection.isSelectionHandle
-import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.foundation.text2.input.internal.selection.FakeClipboardManager
 import androidx.compose.foundation.text2.input.placeCursorAtEnd
+import androidx.compose.foundation.text2.input.setTextAndPlaceCursorAtEnd
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
@@ -166,9 +166,9 @@
             BasicTextField2(
                 state = state,
                 modifier = Modifier.testTag(Tag),
-                filter = { _, changes ->
+                inputTransformation = { _, changes ->
                     if (changes.length > 1) {
-                        val newText = changes.asSequence().joinToString("-")
+                        val newText = changes.asCharSequence().asSequence().joinToString("-")
                         changes.replace(0, changes.length, newText)
                     }
                 }
@@ -229,8 +229,9 @@
             BasicTextField2(
                 state = state,
                 modifier = Modifier.testTag(Tag),
-                filter = { _, changes ->
-                    changes.replace(0, changes.length, changes.replace(Regex("a"), ""))
+                inputTransformation = { _, changes ->
+                    val newChange = changes.asCharSequence().replace(Regex("a"), "")
+                    changes.replace(0, changes.length, newChange)
                 }
             )
         }
@@ -301,7 +302,7 @@
 
         rule.onNodeWithTag(Tag).assertTextEquals("hello")
 
-        state.editProcessor.reset(TextFieldCharSequence("hello2"))
+        state.setTextAndPlaceCursorAtEnd("hello2")
 
         rule.onNodeWithTag(Tag).assertTextEquals("hello2")
     }
@@ -337,7 +338,9 @@
             assertSelection(TextRange.Zero)
         }
 
-        state.editProcessor.reset(TextFieldCharSequence("hello", selection = TextRange(2)))
+        state.edit {
+            selectCharsIn(TextRange(2))
+        }
 
         with(rule.onNodeWithTag(Tag)) {
             assertTextEquals("hello")
@@ -374,7 +377,7 @@
             BasicTextField2(
                 state = state,
                 modifier = Modifier.testTag(Tag),
-                filter = { _, changes ->
+                inputTransformation = { _, changes ->
                     changes.revertAllChanges()
                 }
             )
@@ -509,10 +512,11 @@
                 BasicTextField2(
                     state = state,
                     modifier = Modifier.testTag(Tag),
-                    filter = { _, changes ->
+                    inputTransformation = { _, changes ->
                         // remove all 'l' characters
                         if (changes.changes.changeCount != 0) {
-                            changes.replace(0, changes.length, changes.replace(Regex("l"), ""))
+                            val newChange = changes.asCharSequence().replace(Regex("l"), "")
+                            changes.replace(0, changes.length, newChange)
                             changes.placeCursorAtEnd()
                         }
                     }
@@ -551,20 +555,6 @@
         }
     }
 
-//    @Test
-//    fun semantics_copy_disabled_whenDisallowCopy() {
-//        val state = TextFieldState("Hello World!", initialSelectionInChars = TextRange(0, 5))
-//        rule.setContent {
-//            BasicTextField2(
-//                state = state,
-//                modifier = Modifier.testTag(Tag),
-//                allowCopy = false
-//            )
-//        }
-//
-//        rule.onNodeWithTag(Tag).assert(SemanticsMatcher.keyNotDefined(SemanticsActions.CopyText))
-//    }
-
     @Test
     fun semantics_copy_disabled_whenSelectionCollapsed() {
         val state = TextFieldState("Hello World!")
@@ -588,7 +578,7 @@
                 BasicTextField2(
                     state = state,
                     modifier = Modifier.testTag(Tag),
-                    filter = { original, changes ->
+                    inputTransformation = { original, changes ->
                         // reject copy action collapsing the selection
                         if (changes.selectionInChars != original.selectionInChars) {
                             changes.revertAllChanges()
@@ -628,21 +618,6 @@
         }
     }
 
-//    @OptIn(ExperimentalTestApi::class)
-//    @Test
-//    fun semantics_cut_disabled_whenDisallowCopy() {
-//        val state = TextFieldState("Hello World!", initialSelectionInChars = TextRange(0, 5))
-//        rule.setContent {
-//            BasicTextField2(
-//                state = state,
-//                modifier = Modifier.testTag(Tag),
-//                allowCopy = false
-//            )
-//        }
-//
-//        rule.onNodeWithTag(Tag).assert(SemanticsMatcher.keyNotDefined(SemanticsActions.CutText))
-//    }
-
     @OptIn(ExperimentalTestApi::class)
     @Test
     fun semantics_cut_appliesFilter() {
@@ -653,7 +628,7 @@
                 BasicTextField2(
                     state = state,
                     modifier = Modifier.testTag(Tag),
-                    filter = { _, changes ->
+                    inputTransformation = { _, changes ->
                         changes.revertAllChanges()
                     }
                 )
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
index cfabe0a..59c76a5 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text.TEST_FONT_FAMILY
 import androidx.compose.foundation.text.selection.fetchTextLayoutResult
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldBuffer
 import androidx.compose.foundation.text2.input.TextFieldBuffer.ChangeList
 import androidx.compose.foundation.text2.input.TextFieldCharSequence
@@ -492,7 +492,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = RejectAllTextFilter,
+                inputTransformation = RejectAllTextFilter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -508,7 +508,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = RejectAllTextFilter,
+                inputTransformation = RejectAllTextFilter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -523,7 +523,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = RejectAllTextFilter,
+                inputTransformation = RejectAllTextFilter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -538,7 +538,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = RejectAllTextFilter,
+                inputTransformation = RejectAllTextFilter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -556,11 +556,11 @@
         }
 
         val state = TextFieldState()
-        var filter by mutableStateOf<TextEditFilter?>(null)
+        var filter by mutableStateOf<InputTransformation?>(null)
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = filter,
+                inputTransformation = filter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -583,11 +583,11 @@
     @Test
     fun textField_appliesFilter_toSetTextSemanticsAction_afterChanging() {
         val state = TextFieldState()
-        var filter by mutableStateOf<TextEditFilter?>(null)
+        var filter by mutableStateOf<InputTransformation?>(null)
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = filter,
+                inputTransformation = filter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -609,11 +609,11 @@
     @Test
     fun textField_appliesFilter_toInsertTextSemanticsAction_afterChanging() {
         val state = TextFieldState()
-        var filter by mutableStateOf<TextEditFilter?>(null)
+        var filter by mutableStateOf<InputTransformation?>(null)
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = filter,
+                inputTransformation = filter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -635,11 +635,11 @@
     @Test
     fun textField_appliesFilter_toKeyEvents_afterChanging() {
         val state = TextFieldState()
-        var filter by mutableStateOf<TextEditFilter?>(null)
+        var filter by mutableStateOf<InputTransformation?>(null)
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = filter,
+                inputTransformation = filter,
                 modifier = Modifier.testTag(Tag)
             )
         }
@@ -670,7 +670,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     if (new.changes.changeCount > 0) {
                         changes = new.changes
                     }
@@ -701,7 +701,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     if (new.changes.changeCount > 0) {
                         changes = new.changes
                     }
@@ -732,7 +732,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     if (new.changes.changeCount > 0) {
                         changes = new.changes
                     }
@@ -769,7 +769,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     if (new.changes.changeCount > 0) {
                         changes = new.changes
                     }
@@ -800,7 +800,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     if (new.changes.changeCount > 0) {
                         changes = new.changes
                     }
@@ -827,7 +827,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     if (new.changes.changeCount > 0) {
                         changes = new.changes
                     }
@@ -853,7 +853,7 @@
         rule.setContent {
             BasicTextField2(
                 state = state,
-                filter = { _, new ->
+                inputTransformation = { _, new ->
                     if (new.changes.changeCount > 0) {
                         changes = new.changes
                     }
@@ -887,7 +887,7 @@
             BasicTextField2(
                 state = rememberTextFieldState(),
                 modifier = Modifier.testTag(Tag),
-                filter = filter,
+                inputTransformation = filter,
             )
         }
         requestFocus(Tag)
@@ -910,7 +910,7 @@
             BasicTextField2(
                 state = rememberTextFieldState(),
                 modifier = Modifier.testTag(Tag),
-                filter = filter,
+                inputTransformation = filter,
                 keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
             )
         }
@@ -934,7 +934,7 @@
             BasicTextField2(
                 state = rememberTextFieldState(),
                 modifier = Modifier.testTag(Tag),
-                filter = filter,
+                inputTransformation = filter,
                 keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
             )
         }
@@ -963,7 +963,7 @@
             BasicTextField2(
                 state = rememberTextFieldState(),
                 modifier = Modifier.testTag(Tag),
-                filter = filter,
+                inputTransformation = filter,
             )
         }
         requestFocus(Tag)
@@ -1387,8 +1387,8 @@
         endBatchEdit()
     }
 
-    private object RejectAllTextFilter : TextEditFilter {
-        override fun filter(
+    private object RejectAllTextFilter : InputTransformation {
+        override fun transformInput(
             originalValue: TextFieldCharSequence,
             valueWithChanges: TextFieldBuffer
         ) {
@@ -1397,8 +1397,8 @@
     }
 
     private class KeyboardOptionsFilter(override val keyboardOptions: KeyboardOptions) :
-        TextEditFilter {
-        override fun filter(
+        InputTransformation {
+        override fun transformInput(
             originalValue: TextFieldCharSequence,
             valueWithChanges: TextFieldBuffer
         ) {
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
index 9534140..b03be0f 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
@@ -28,8 +28,8 @@
 import androidx.compose.foundation.text.TEST_FONT_FAMILY
 import androidx.compose.foundation.text.selection.LocalTextSelectionColors
 import androidx.compose.foundation.text.selection.TextSelectionColors
-import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldState
+import androidx.compose.foundation.text2.input.setTextAndPlaceCursorAtEnd
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.getValue
@@ -769,9 +769,7 @@
                         val currValue = state.text
                         if (currValue.isNotEmpty()) {
                             val newText = currValue.dropLast(1)
-                            val newValue =
-                                TextFieldCharSequence(newText.toString(), TextRange(newText.length))
-                            state.editProcessor.reset(newValue)
+                            state.setTextAndPlaceCursorAtEnd(newText.toString())
                         }
 
                         val p = measurable.measure(constraints)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt
index 61a58993..08965f4 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt
@@ -26,11 +26,11 @@
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.text.TextLayoutResultProxy
-import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldLineLimits
 import androidx.compose.foundation.text2.input.TextFieldLineLimits.MultiLine
 import androidx.compose.foundation.text2.input.TextFieldLineLimits.SingleLine
 import androidx.compose.foundation.text2.input.TextFieldState
+import androidx.compose.foundation.text2.input.placeCursorAtEnd
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
@@ -399,10 +399,9 @@
         rule.onNodeWithTag(TextfieldTag).assertIsNotFocused()
 
         // move cursor to the end
-        // TODO
-        state.editProcessor.reset(
-            TextFieldCharSequence(state.text, selection = TextRange(longText.length))
-        )
+        state.edit {
+            placeCursorAtEnd()
+        }
 
         rule.runOnIdle {
             assertThat(scrollState.value).isEqualTo(0)
@@ -425,9 +424,9 @@
         rule.onNodeWithTag(TextfieldTag).requestFocus()
 
         // move cursor to the end
-        state.editProcessor.reset(
-            TextFieldCharSequence(state.text, selection = TextRange(longText.length))
-        )
+        state.edit {
+            placeCursorAtEnd()
+        }
 
         rule.runOnIdle {
             assertThat(scrollState.value).isEqualTo(scrollState.maxValue)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/BackspaceCommandTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/BackspaceCommandTest.kt
index 81b5ee0..93c22ac 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/BackspaceCommandTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/BackspaceCommandTest.kt
@@ -41,7 +41,7 @@
     fun test_delete() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo("BCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -52,7 +52,7 @@
     fun test_delete_from_offset0() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -63,7 +63,7 @@
     fun test_delete_with_selection() {
         val eb = EditingBuffer("ABCDE", TextRange(2, 3))
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo("ABDE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -75,7 +75,7 @@
         val eb = EditingBuffer("ABCDE", TextRange(1))
         eb.setComposition(2, 3)
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo("ABDE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -86,7 +86,7 @@
     fun test_delete_surrogate_pair() {
         val eb = EditingBuffer("$SP1$SP2$SP3$SP4$SP5", TextRange(2))
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo("$SP2$SP3$SP4$SP5")
         assertThat(eb.cursor).isEqualTo(0)
@@ -97,7 +97,7 @@
     fun test_delete_with_selection_surrogate_pair() {
         val eb = EditingBuffer("$SP1$SP2$SP3$SP4$SP5", TextRange(4, 6))
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo("$SP1$SP2$SP4$SP5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -109,7 +109,7 @@
         val eb = EditingBuffer("$SP1$SP2$SP3$SP4$SP5", TextRange(2))
         eb.setComposition(4, 6)
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo("$SP1$SP2$SP4$SP5")
         assertThat(eb.cursor).isEqualTo(2)
@@ -124,7 +124,7 @@
             TextRange(ZWJ_EMOJI.length)
         )
 
-        eb.update(BackspaceCommand)
+        eb.backspace()
 
         assertThat(eb.toString()).isEqualTo(ZWJ_EMOJI)
         assertThat(eb.cursor).isEqualTo(0)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/MoveCursorCommandTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/MoveCursorCommandTest.kt
index e851ac0..117045c 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/MoveCursorCommandTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/MoveCursorCommandTest.kt
@@ -40,7 +40,7 @@
     fun test_left() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(MoveCursorCommand(-1))
+        eb.moveCursor(-1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -51,7 +51,7 @@
     fun test_left_multiple() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(MoveCursorCommand(-2))
+        eb.moveCursor(-2)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -62,7 +62,7 @@
     fun test_left_from_offset0() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(MoveCursorCommand(-1))
+        eb.moveCursor(-1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -73,7 +73,7 @@
     fun test_right() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(MoveCursorCommand(1))
+        eb.moveCursor(1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(4)
@@ -84,7 +84,7 @@
     fun test_right_multiple() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(MoveCursorCommand(2))
+        eb.moveCursor(2)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(5)
@@ -95,7 +95,7 @@
     fun test_right_from_offset_length() {
         val eb = EditingBuffer("ABCDE", TextRange(5))
 
-        eb.update(MoveCursorCommand(1))
+        eb.moveCursor(1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(5)
@@ -106,7 +106,7 @@
     fun test_left_surrogate_pair() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(MoveCursorCommand(-1))
+        eb.moveCursor(-1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH3$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -117,7 +117,7 @@
     fun test_left_multiple_surrogate_pair() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(MoveCursorCommand(-2))
+        eb.moveCursor(-2)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH3$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(2)
@@ -128,7 +128,7 @@
     fun test_right_surrogate_pair() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(MoveCursorCommand(1))
+        eb.moveCursor(1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH3$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(8)
@@ -139,7 +139,7 @@
     fun test_right_multiple_surrogate_pair() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(MoveCursorCommand(2))
+        eb.moveCursor(2)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH3$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(10)
@@ -151,7 +151,7 @@
     fun test_left_emoji() {
         val eb = EditingBuffer("$FAMILY$FAMILY", TextRange(FAMILY.length))
 
-        eb.update(MoveCursorCommand(-1))
+        eb.moveCursor(-1)
 
         assertThat(eb.toString()).isEqualTo("$FAMILY$FAMILY")
         assertThat(eb.cursor).isEqualTo(0)
@@ -163,7 +163,7 @@
     fun test_right_emoji() {
         val eb = EditingBuffer("$FAMILY$FAMILY", TextRange(FAMILY.length))
 
-        eb.update(MoveCursorCommand(1))
+        eb.moveCursor(1)
 
         assertThat(eb.toString()).isEqualTo("$FAMILY$FAMILY")
         assertThat(eb.cursor).isEqualTo(2 * FAMILY.length)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnectionTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnectionTest.kt
index c8a8fc4..7b71d3f 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnectionTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnectionTest.kt
@@ -20,6 +20,7 @@
 import android.view.inputmethod.EditorInfo
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.text2.input.TextFieldCharSequence
+import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.text.input.ImeAction
@@ -27,7 +28,6 @@
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import kotlin.test.assertFalse
-import org.junit.Assert.assertTrue
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
@@ -50,8 +50,8 @@
             [email protected]?.invoke(imeAction)
         }
 
-        override fun requestEdits(editCommands: List<EditCommand>) {
-            onRequestEdits?.invoke(editCommands)
+        override fun requestEdit(block: EditingBuffer.() -> Unit) {
+            onRequestEdit?.invoke(block)
         }
 
         override fun sendKeyEvent(keyEvent: KeyEvent) {
@@ -59,8 +59,13 @@
         }
     }
 
+    private var state: TextFieldState = TextFieldState()
     private var value: TextFieldCharSequence = TextFieldCharSequence()
-    private var onRequestEdits: ((List<EditCommand>) -> Unit)? = null
+        set(value) {
+            field = value
+            state = TextFieldState(value.toString(), value.selectionInChars)
+        }
+    private var onRequestEdit: ((EditingBuffer.() -> Unit) -> Unit)? = null
     private var onSendKeyEvent: ((KeyEvent) -> Unit)? = null
     private var onImeAction: ((ImeAction) -> Unit)? = null
 
@@ -160,30 +165,11 @@
     }
 
     @Test
-    fun commitTextTest() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "", selection = TextRange.Zero)
-
-        // Inserting "Hello, " into the empty text field.
-        assertThat(ic.commitText("Hello, ", 1)).isTrue()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(1)
-        assertThat(editCommands[0]).isEqualTo(CommitTextCommand("Hello, ", 1))
-    }
-
-    @Test
     fun commitTextTest_batchSession() {
-        var editCommands = listOf<EditCommand>()
         var requestEditsCalled = 0
-        onRequestEdits = {
+        onRequestEdit = {
             requestEditsCalled++
-            editCommands = it
+            state.mainBuffer.it()
         }
         value = TextFieldCharSequence(text = "", selection = TextRange.Zero)
 
@@ -200,290 +186,16 @@
         ic.endBatchEdit()
 
         assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(2)
-        assertThat(editCommands[0]).isEqualTo(CommitTextCommand("Hello, ", 1))
-        assertThat(editCommands[1]).isEqualTo(CommitTextCommand("World.", 1))
-    }
-
-    @Test
-    fun setComposingRegion() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World.", selection = TextRange.Zero)
-
-        // Mark first "H" as composition.
-        assertThat(ic.setComposingRegion(0, 1)).isTrue()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(1)
-        assertThat(editCommands[0]).isEqualTo(SetComposingRegionCommand(0, 1))
-    }
-
-    @Test
-    fun setComposingRegion_batchSession() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World", selection = TextRange.Zero)
-
-        // Do not callback to listener during batch session.
-        ic.beginBatchEdit()
-
-        assertThat(ic.setComposingRegion(0, 1)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        assertThat(ic.setComposingRegion(1, 2)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        ic.endBatchEdit()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(2)
-        assertThat(editCommands[0]).isEqualTo(SetComposingRegionCommand(0, 1))
-        assertThat(editCommands[1]).isEqualTo(SetComposingRegionCommand(1, 2))
-    }
-
-    @Test
-    fun setComposingTextTest() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "", selection = TextRange.Zero)
-
-        // Inserting "Hello, " into the empty text field.
-        assertThat(ic.setComposingText("Hello, ", 1)).isTrue()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(1)
-        assertThat(editCommands[0]).isEqualTo(SetComposingTextCommand("Hello, ", 1))
-    }
-
-    @Test
-    fun setComposingTextTest_batchSession() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "", selection = TextRange.Zero)
-
-        // IME set text "Hello, World." with two setComposingText API within the single batch
-        // session. Do not callback to listener during batch session.
-        ic.beginBatchEdit()
-
-        assertThat(ic.setComposingText("Hello, ", 1)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        assertThat(ic.setComposingText("World.", 1)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        ic.endBatchEdit()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(2)
-        assertThat(editCommands[0]).isEqualTo(SetComposingTextCommand("Hello, ", 1))
-        assertThat(editCommands[1]).isEqualTo(SetComposingTextCommand("World.", 1))
-    }
-
-    @Test
-    fun deleteSurroundingText() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World.", selection = TextRange.Zero)
-
-        // Delete first "Hello, " characters
-        assertTrue(ic.deleteSurroundingText(0, 6))
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(1)
-        assertThat(editCommands[0]).isEqualTo(DeleteSurroundingTextCommand(0, 6))
-    }
-
-    @Test
-    fun deleteSurroundingText_batchSession() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World", selection = TextRange.Zero)
-
-        // Do not callback to listener during batch session.
-        ic.beginBatchEdit()
-
-        assertThat(ic.deleteSurroundingText(0, 6)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        assertThat(ic.deleteSurroundingText(0, 5)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        ic.endBatchEdit()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(2)
-        assertThat(editCommands[0]).isEqualTo(DeleteSurroundingTextCommand(0, 6))
-        assertThat(editCommands[1]).isEqualTo(DeleteSurroundingTextCommand(0, 5))
-    }
-
-    @Test
-    fun deleteSurroundingTextInCodePoints() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World.", selection = TextRange.Zero)
-
-        // Delete first "Hello, " characters
-        assertThat(ic.deleteSurroundingTextInCodePoints(0, 6)).isTrue()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(1)
-        assertThat(editCommands[0]).isEqualTo(DeleteSurroundingTextInCodePointsCommand(0, 6))
-    }
-
-    @Test
-    fun deleteSurroundingTextInCodePoints_batchSession() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World", selection = TextRange.Zero)
-
-        // Do not callback to listener during batch session.
-        ic.beginBatchEdit()
-
-        assertThat(ic.deleteSurroundingTextInCodePoints(0, 6)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        assertThat(ic.deleteSurroundingTextInCodePoints(0, 5)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        ic.endBatchEdit()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(2)
-        assertThat(editCommands[0]).isEqualTo(DeleteSurroundingTextInCodePointsCommand(0, 6))
-        assertThat(editCommands[1]).isEqualTo(DeleteSurroundingTextInCodePointsCommand(0, 5))
-    }
-
-    @Test
-    fun setSelection() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World.", selection = TextRange.Zero)
-
-        // Select "Hello, "
-        assertThat(ic.setSelection(0, 6)).isTrue()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(1)
-        assertThat(editCommands[0]).isEqualTo(SetSelectionCommand(0, 6))
-    }
-
-    @Test
-    fun setSelection_batchSession() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World", selection = TextRange.Zero)
-
-        // Do not callback to listener during batch session.
-        ic.beginBatchEdit()
-
-        assertThat(ic.setSelection(0, 6)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        assertThat(ic.setSelection(6, 11)).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        ic.endBatchEdit()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(2)
-        assertThat(editCommands[0]).isEqualTo(SetSelectionCommand(0, 6))
-        assertThat(editCommands[1]).isEqualTo(SetSelectionCommand(6, 11))
-    }
-
-    @Test
-    fun finishComposingText() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World.", selection = TextRange.Zero)
-
-        // Cancel any ongoing composition. In this example, there is no composition range, but
-        // should record the API call
-        assertTrue(ic.finishComposingText())
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(1)
-        assertThat(editCommands[0]).isEqualTo(FinishComposingTextCommand)
-    }
-
-    @Test
-    fun finishComposingText_batchSession() {
-        var editCommands = listOf<EditCommand>()
-        var requestEditsCalled = 0
-        onRequestEdits = {
-            requestEditsCalled++
-            editCommands = it
-        }
-        value = TextFieldCharSequence(text = "Hello, World", selection = TextRange.Zero)
-
-        // Do not callback to listener during batch session.
-        ic.beginBatchEdit()
-
-        assertThat(ic.finishComposingText()).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        assertThat(ic.finishComposingText()).isTrue()
-        assertThat(requestEditsCalled).isEqualTo(0)
-
-        ic.endBatchEdit()
-
-        assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(2)
-        assertThat(editCommands[0]).isEqualTo(FinishComposingTextCommand)
-        assertThat(editCommands[1]).isEqualTo(FinishComposingTextCommand)
+        assertThat(state.mainBuffer.toString()).isEqualTo("Hello, World.")
+        assertThat(state.mainBuffer.selection).isEqualTo(TextRange(13))
     }
 
     @Test
     fun mixedAPICalls_batchSession() {
-        var editCommands = listOf<EditCommand>()
         var requestEditsCalled = 0
-        onRequestEdits = {
+        onRequestEdit = {
             requestEditsCalled++
-            editCommands = it
+            state.mainBuffer.it()
         }
         value = TextFieldCharSequence(text = "", selection = TextRange.Zero)
 
@@ -508,12 +220,8 @@
         ic.endBatchEdit()
 
         assertThat(requestEditsCalled).isEqualTo(1)
-        assertThat(editCommands.size).isEqualTo(5)
-        assertThat(editCommands[0]).isEqualTo(SetComposingTextCommand("Hello, ", 1))
-        assertThat(editCommands[1]).isEqualTo(FinishComposingTextCommand)
-        assertThat(editCommands[2]).isEqualTo(CommitTextCommand("World.", 1))
-        assertThat(editCommands[3]).isEqualTo(SetSelectionCommand(0, 12))
-        assertThat(editCommands[4]).isEqualTo(CommitTextCommand("", 1))
+        assertThat(state.mainBuffer.toString()).isEqualTo(".")
+        assertThat(state.mainBuffer.selection).isEqualTo(TextRange(0))
     }
 
     @Test
@@ -526,7 +234,7 @@
     @Test
     fun do_not_callback_if_only_readonly_ops() {
         var requestEditsCalled = 0
-        onRequestEdits = { requestEditsCalled++ }
+        onRequestEdit = { requestEditsCalled++ }
         ic.beginBatchEdit()
         ic.getSelectedText(1)
         ic.endBatchEdit()
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
index 024aedc..7c12b07 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldCursorHandleTest.kt
@@ -107,7 +107,7 @@
             BasicTextField2(
                 state,
                 textStyle = TextStyle(fontSize = fontSize, fontFamily = TEST_FONT_FAMILY),
-                filter = { _, valueWithChanges ->
+                inputTransformation = { _, valueWithChanges ->
                     valueWithChanges.selectCharsIn(TextRange(4))
                 },
                 modifier = Modifier.testTag(TAG)
@@ -506,7 +506,7 @@
             BasicTextField2(
                 state,
                 textStyle = TextStyle(fontSize = fontSize, fontFamily = TEST_FONT_FAMILY),
-                filter = { _, valueWithChanges ->
+                inputTransformation = { _, valueWithChanges ->
                     valueWithChanges.selectCharsIn(TextRange.Zero)
                 },
                 modifier = Modifier
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldTextToolbarTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldTextToolbarTest.kt
index 22e2f2f..36788cb 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldTextToolbarTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldTextToolbarTest.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.text.selection.FakeTextToolbar
 import androidx.compose.foundation.text.selection.isSelectionHandle
 import androidx.compose.foundation.text2.BasicTextField2
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldLineLimits
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.foundation.text2.input.placeCursorAtEnd
@@ -661,7 +661,7 @@
         toolbar: TextToolbar = FakeTextToolbar(),
         singleLine: Boolean = false,
         clipboardManager: ClipboardManager = FakeClipboardManager(),
-        filter: TextEditFilter? = null
+        filter: InputTransformation? = null
     ) {
         rule.setContent {
             CompositionLocalProvider(
@@ -682,7 +682,7 @@
                     } else {
                         TextFieldLineLimits.Default
                     },
-                    filter = filter
+                    inputTransformation = filter
                 )
             }
         }
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputSession.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputSession.android.kt
index b4dc538..9aa95e9 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputSession.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputSession.android.kt
@@ -25,7 +25,7 @@
 import android.view.inputmethod.InputConnection
 import androidx.annotation.VisibleForTesting
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.ui.platform.PlatformTextInputSession
@@ -58,14 +58,14 @@
 internal actual suspend fun PlatformTextInputSession.platformSpecificTextInputSession(
     state: TextFieldState,
     imeOptions: ImeOptions,
-    filter: TextEditFilter?,
+    filter: InputTransformation?,
     onImeAction: ((ImeAction) -> Unit)?
 ): Nothing {
     val composeImm = ComposeInputMethodManager(view)
 
     coroutineScope {
         launch(start = CoroutineStart.UNDISPATCHED) {
-            state.editProcessor.collectResets { old, new ->
+            state.collectImeNotifications { old, new ->
                 val needUpdateSelection =
                     (old.selectionInChars != new.selectionInChars) ||
                         old.compositionInChars != new.compositionInChars
@@ -91,8 +91,12 @@
                 override val text: TextFieldCharSequence
                     get() = state.text
 
-                override fun requestEdits(editCommands: List<EditCommand>) {
-                    state.editProcessor.update(editCommands, filter)
+                override fun requestEdit(block: EditingBuffer.() -> Unit) {
+                    state.editAsUser(
+                        inputTransformation = filter,
+                        notifyImeOfChanges = false,
+                        block = block
+                    )
                 }
 
                 override fun sendKeyEvent(keyEvent: KeyEvent) {
@@ -212,16 +216,16 @@
 }
 
 /**
- * Adds [resetListener] to this [EditProcessor] and then suspends until cancelled, removing the
+ * Adds [notifyImeListener] to this [TextFieldState] and then suspends until cancelled, removing the
  * listener before continuing.
  */
-private suspend inline fun EditProcessor.collectResets(
-    resetListener: EditProcessor.ResetListener
+private suspend inline fun TextFieldState.collectImeNotifications(
+    notifyImeListener: TextFieldState.NotifyImeListener
 ): Nothing {
     suspendCancellableCoroutine<Nothing> { continuation ->
-        addResetListener(resetListener)
+        addNotifyImeListener(notifyImeListener)
         continuation.invokeOnCancellation {
-            removeResetListener(resetListener)
+            removeNotifyImeListener(notifyImeListener)
         }
     }
 }
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnection.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnection.android.kt
index c2dfcfc..65fba2a 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnection.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/StatelessInputConnection.android.kt
@@ -34,6 +34,7 @@
 import androidx.compose.foundation.text2.input.getSelectedText
 import androidx.compose.foundation.text2.input.getTextAfterSelection
 import androidx.compose.foundation.text2.input.getTextBeforeSelection
+import androidx.compose.runtime.collection.mutableVectorOf
 import androidx.compose.ui.text.input.ImeAction
 
 @VisibleForTesting
@@ -68,7 +69,7 @@
     /**
      * Recording of editing operations for batch editing
      */
-    private val editCommands = mutableListOf<EditCommand>()
+    private val editCommands = mutableVectorOf<EditingBuffer.() -> Unit>()
 
     /**
      * Add edit op to internal list with wrapping batch edit. It's not guaranteed by IME that
@@ -77,7 +78,7 @@
      * reaches 0, meaning that artificial batches won't be applied until the real batches are
      * completed.
      */
-    private fun addEditCommandWithBatch(editCommand: EditCommand) {
+    private fun addEditCommandWithBatch(editCommand: EditingBuffer.() -> Unit) {
         beginBatchEditInternal()
         try {
             editCommands.add(editCommand)
@@ -105,8 +106,10 @@
     private fun endBatchEditInternal(): Boolean {
         batchDepth--
         if (batchDepth == 0 && editCommands.isNotEmpty()) {
-            // apply the changes to active input session.
-            session.requestEdits(editCommands.toMutableList())
+            // apply the changes to active input session in order.
+            session.requestEdit {
+                editCommands.forEach { it.invoke(this) }
+            }
             editCommands.clear()
         }
         return batchDepth > 0
@@ -124,45 +127,57 @@
 
     override fun commitText(text: CharSequence?, newCursorPosition: Int): Boolean {
         logDebug("commitText(\"$text\", $newCursorPosition)")
-        addEditCommandWithBatch(CommitTextCommand(text.toString(), newCursorPosition))
+        addEditCommandWithBatch {
+            commitText(text.toString(), newCursorPosition)
+        }
         return true
     }
 
     override fun setComposingRegion(start: Int, end: Int): Boolean {
         logDebug("setComposingRegion($start, $end)")
-        addEditCommandWithBatch(SetComposingRegionCommand(start, end))
+        addEditCommandWithBatch {
+            setComposingRegion(start, end)
+        }
         return true
     }
 
     override fun setComposingText(text: CharSequence?, newCursorPosition: Int): Boolean {
         logDebug("setComposingText(\"$text\", $newCursorPosition)")
-        addEditCommandWithBatch(SetComposingTextCommand(text.toString(), newCursorPosition))
+        addEditCommandWithBatch {
+            setComposingText(text.toString(), newCursorPosition)
+        }
         return true
     }
 
     override fun deleteSurroundingTextInCodePoints(beforeLength: Int, afterLength: Int): Boolean {
         logDebug("deleteSurroundingTextInCodePoints($beforeLength, $afterLength)")
-        addEditCommandWithBatch(
-            DeleteSurroundingTextInCodePointsCommand(beforeLength, afterLength)
-        )
+        addEditCommandWithBatch {
+            deleteSurroundingTextInCodePoints(beforeLength, afterLength)
+        }
         return true
     }
 
     override fun deleteSurroundingText(beforeLength: Int, afterLength: Int): Boolean {
         logDebug("deleteSurroundingText($beforeLength, $afterLength)")
-        addEditCommandWithBatch(DeleteSurroundingTextCommand(beforeLength, afterLength))
+        addEditCommandWithBatch {
+            deleteSurroundingText(beforeLength, afterLength)
+        }
         return true
     }
 
     override fun setSelection(start: Int, end: Int): Boolean {
         logDebug("setSelection($start, $end)")
-        addEditCommandWithBatch(SetSelectionCommand(start, end))
+        addEditCommandWithBatch {
+            setSelection(start, end)
+        }
         return true
     }
 
     override fun finishComposingText(): Boolean {
         logDebug("finishComposingText()")
-        addEditCommandWithBatch(FinishComposingTextCommand)
+        addEditCommandWithBatch {
+            finishComposingText()
+        }
         return true
     }
 
@@ -231,7 +246,9 @@
         logDebug("performContextMenuAction($id)")
         when (id) {
             android.R.id.selectAll -> {
-                addEditCommandWithBatch(SetSelectionCommand(0, text.length))
+                addEditCommandWithBatch {
+                    setSelection(0, text.length)
+                }
             }
             // TODO(siyamed): Need proper connection to cut/copy/paste
             android.R.id.cut -> sendSynthesizedKeyEvent(KeyEvent.KEYCODE_CUT)
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextInputSession.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextInputSession.android.kt
index 754a2ca..52f11c1 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextInputSession.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextInputSession.android.kt
@@ -41,7 +41,7 @@
     /**
      * Callback to execute for InputConnection to communicate the changes requested by the IME.
      */
-    fun requestEdits(editCommands: List<EditCommand>)
+    fun requestEdit(block: EditingBuffer.() -> Unit)
 
     /**
      * Delegates IME requested KeyEvents.
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListAnimateScrollScope.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListAnimateScrollScope.kt
index ffb2e95..7df5322 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListAnimateScrollScope.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListAnimateScrollScope.kt
@@ -17,16 +17,14 @@
 package androidx.compose.foundation.lazy
 
 import androidx.compose.foundation.gestures.ScrollScope
-import androidx.compose.foundation.lazy.layout.LazyAnimateScrollScope
-import androidx.compose.ui.unit.Density
+import androidx.compose.foundation.lazy.layout.LazyLayoutAnimateScrollScope
 import androidx.compose.ui.util.fastFirstOrNull
 import androidx.compose.ui.util.fastSumBy
 import kotlin.math.abs
 
 internal class LazyListAnimateScrollScope(
     private val state: LazyListState
-) : LazyAnimateScrollScope {
-    override val density: Density get() = state.density
+) : LazyLayoutAnimateScrollScope {
 
     override val firstVisibleItemIndex: Int get() = state.firstVisibleItemIndex
 
@@ -38,9 +36,7 @@
     override val itemCount: Int
         get() = state.layoutInfo.totalItemsCount
 
-    override val numOfItemsForTeleport: Int = 100
-
-    override fun getTargetItemOffset(index: Int): Int? =
+    override fun getOffsetForItem(index: Int): Int? =
         state.layoutInfo.visibleItemsInfo.fastFirstOrNull {
             it.index == index
         }?.offset
@@ -50,10 +46,7 @@
     }
 
     override fun expectedDistanceTo(index: Int, targetScrollOffset: Int): Float {
-        val layoutInfo = state.layoutInfo
-        val visibleItems = layoutInfo.visibleItemsInfo
-        val averageSize =
-            visibleItems.fastSumBy { it.size } / visibleItems.size + layoutInfo.mainAxisItemSpacing
+        val averageSize = averageItemSize
         val indexesDiff = index - firstVisibleItemIndex
         var coercedOffset = minOf(abs(targetScrollOffset), averageSize)
         if (targetScrollOffset < 0) coercedOffset *= -1
@@ -64,4 +57,12 @@
     override suspend fun scroll(block: suspend ScrollScope.() -> Unit) {
         state.scroll(block = block)
     }
+
+    override val averageItemSize: Int
+        get() {
+            val layoutInfo = state.layoutInfo
+            val visibleItems = layoutInfo.visibleItemsInfo
+            val itemsSum = visibleItems.fastSumBy { it.size }
+            return itemsSum / visibleItems.size + layoutInfo.mainAxisItemSpacing
+        }
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
index f382480..467a20c 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
@@ -396,7 +396,12 @@
         index: Int,
         scrollOffset: Int = 0
     ) {
-        animateScrollScope.animateScrollToItem(index, scrollOffset)
+        animateScrollScope.animateScrollToItem(
+            index,
+            scrollOffset,
+            NumberOfItemsToTeleport,
+            density
+        )
     }
 
     /**
@@ -507,3 +512,5 @@
     override val afterContentPadding = 0
     override val mainAxisItemSpacing = 0
 }
+
+private const val NumberOfItemsToTeleport = 100
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateScrollScope.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateScrollScope.kt
index 5110784..e398593 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateScrollScope.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridAnimateScrollScope.kt
@@ -17,16 +17,14 @@
 package androidx.compose.foundation.lazy.grid
 
 import androidx.compose.foundation.gestures.ScrollScope
-import androidx.compose.foundation.lazy.layout.LazyAnimateScrollScope
-import androidx.compose.ui.unit.Density
+import androidx.compose.foundation.lazy.layout.LazyLayoutAnimateScrollScope
 import androidx.compose.ui.util.fastFirstOrNull
 import kotlin.math.abs
 import kotlin.math.max
 
 internal class LazyGridAnimateScrollScope(
     private val state: LazyGridState
-) : LazyAnimateScrollScope {
-    override val density: Density get() = state.density
+) : LazyLayoutAnimateScrollScope {
 
     override val firstVisibleItemIndex: Int get() = state.firstVisibleItemIndex
 
@@ -37,7 +35,7 @@
 
     override val itemCount: Int get() = state.layoutInfo.totalItemsCount
 
-    override fun getTargetItemOffset(index: Int): Int? =
+    override fun getOffsetForItem(index: Int): Int? =
         state.layoutInfo.visibleItemsInfo
             .fastFirstOrNull {
                 it.index == index
@@ -55,10 +53,7 @@
 
     override fun expectedDistanceTo(index: Int, targetScrollOffset: Int): Float {
         val slotsPerLine = state.slotsPerLine
-        val averageLineMainAxisSize = calculateLineAverageMainAxisSize(
-            state.layoutInfo,
-            state.isVertical
-        )
+        val averageLineMainAxisSize = averageItemSize
         val before = index < firstVisibleItemIndex
         val linesDiff =
             (index - firstVisibleItemIndex + (slotsPerLine - 1) * if (before) -1 else 1) /
@@ -70,8 +65,6 @@
             coercedOffset - firstVisibleItemScrollOffset
     }
 
-    override val numOfItemsForTeleport: Int get() = 100 * state.slotsPerLine
-
     private fun calculateLineAverageMainAxisSize(
         layoutInfo: LazyGridLayoutInfo,
         isVertical: Boolean
@@ -119,4 +112,7 @@
     override suspend fun scroll(block: suspend ScrollScope.() -> Unit) {
         state.scroll(block = block)
     }
+
+    override val averageItemSize: Int
+        get() = calculateLineAverageMainAxisSize(state.layoutInfo, state.isVertical)
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt
index 1b18637..4ba600b 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/grid/LazyGridState.kt
@@ -394,6 +394,8 @@
 
     internal val prefetchState = LazyLayoutPrefetchState()
 
+    private val numOfItemsToTeleport: Int get() = 100 * slotsPerLine
+
     /**
      * Animate (smooth scroll) to the given item.
      *
@@ -407,7 +409,7 @@
         index: Int,
         scrollOffset: Int = 0
     ) {
-        animateScrollScope.animateScrollToItem(index, scrollOffset)
+        animateScrollScope.animateScrollToItem(index, scrollOffset, numOfItemsToTeleport, density)
     }
 
     /**
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyAnimateScroll.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyAnimateScroll.kt
index 0a344254..eac8969 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyAnimateScroll.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyAnimateScroll.kt
@@ -46,8 +46,7 @@
  * Abstraction over animated scroll for using [animateScrollToItem] in different layouts.
  * todo(b/243786897): revisit this API and make it public
  */
-internal interface LazyAnimateScrollScope {
-    val density: Density
+internal interface LazyLayoutAnimateScrollScope {
 
     val firstVisibleItemIndex: Int
 
@@ -57,31 +56,33 @@
 
     val itemCount: Int
 
-    fun getTargetItemOffset(index: Int): Int?
+    val averageItemSize: Int
+
+    fun getOffsetForItem(index: Int): Int?
 
     fun ScrollScope.snapToItem(index: Int, scrollOffset: Int)
 
     fun expectedDistanceTo(index: Int, targetScrollOffset: Int): Float
 
-    /** defines min number of items that forces scroll to snap if animation did not reach it */
-    val numOfItemsForTeleport: Int
-
     suspend fun scroll(block: suspend ScrollScope.() -> Unit)
 }
 
-internal suspend fun LazyAnimateScrollScope.animateScrollToItem(
+internal suspend fun LazyLayoutAnimateScrollScope.animateScrollToItem(
     index: Int,
     scrollOffset: Int,
+    numOfItemsForTeleport: Int,
+    density: Density
 ) {
     scroll {
         require(index >= 0f) { "Index should be non-negative ($index)" }
+
         try {
             val targetDistancePx = with(density) { TargetDistance.toPx() }
             val boundDistancePx = with(density) { BoundDistance.toPx() }
             val minDistancePx = with(density) { MinimumDistance.toPx() }
             var loop = true
             var anim = AnimationState(0f)
-            val targetItemInitialOffset = getTargetItemOffset(index)
+            val targetItemInitialOffset = getOffsetForItem(index)
             if (targetItemInitialOffset != null) {
                 // It's already visible, just animate directly
                 throw ItemFoundInScroll(targetItemInitialOffset, anim)
@@ -129,7 +130,7 @@
                 debugLog {
                     "Scrolling to index=$index offset=$scrollOffset from " +
                         "index=$firstVisibleItemIndex offset=$firstVisibleItemScrollOffset with " +
-                        " calculated target=$target"
+                        "calculated target=$target"
                 }
 
                 anim = anim.copy(value = 0f)
@@ -139,7 +140,7 @@
                     sequentialAnimation = (anim.velocity != 0f)
                 ) {
                     // If we haven't found the item yet, check if it's visible.
-                    var targetItemOffset = getTargetItemOffset(index)
+                    var targetItemOffset = getOffsetForItem(index)
 
                     if (targetItemOffset == null) {
                         // Springs can overshoot their target, clamp to the desired range
@@ -154,7 +155,7 @@
                         }
 
                         val consumed = scrollBy(delta)
-                        targetItemOffset = getTargetItemOffset(index)
+                        targetItemOffset = getOffsetForItem(index)
                         if (targetItemOffset != null) {
                             debugLog { "Found the item after performing scrollBy()" }
                         } else if (!isOvershot()) {
@@ -210,8 +211,8 @@
                     if (isOvershot()) {
                         debugLog {
                             "Overshot, " +
-                                "item $firstVisibleItemIndex at $firstVisibleItemScrollOffset, " +
-                                "target is $scrollOffset"
+                                "item $firstVisibleItemIndex at  $firstVisibleItemScrollOffset," +
+                                " target is $scrollOffset"
                         }
                         snapToItem(index = index, scrollOffset = scrollOffset)
                         loop = false
@@ -234,15 +235,20 @@
             debugLog {
                 "Seeking by $target at velocity ${itemFound.previousAnimation.velocity}"
             }
-            anim.animateTo(target, sequentialAnimation = (anim.velocity != 0f)) {
+            anim.animateTo(
+                target,
+                sequentialAnimation = (anim.velocity != 0f)
+            ) {
                 // Springs can overshoot their target, clamp to the desired range
                 val coercedValue = when {
                     target > 0 -> {
                         value.coerceAtMost(target)
                     }
+
                     target < 0 -> {
                         value.coerceAtLeast(target)
                     }
+
                     else -> {
                         debugLog { "WARNING: somehow ended up seeking 0px, this shouldn't happen" }
                         0f
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateScrollScope.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateScrollScope.kt
index 3af0604..e16e767 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateScrollScope.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridAnimateScrollScope.kt
@@ -18,16 +18,14 @@
 
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.gestures.ScrollScope
-import androidx.compose.foundation.lazy.layout.LazyAnimateScrollScope
-import androidx.compose.ui.unit.Density
+import androidx.compose.foundation.lazy.layout.LazyLayoutAnimateScrollScope
 import androidx.compose.ui.util.fastSumBy
 import kotlin.math.abs
 
 @ExperimentalFoundationApi
 internal class LazyStaggeredGridAnimateScrollScope(
     private val state: LazyStaggeredGridState
-) : LazyAnimateScrollScope {
-    override val density: Density get() = state.density
+) : LazyLayoutAnimateScrollScope {
 
     override val firstVisibleItemIndex: Int get() = state.firstVisibleItemIndex
 
@@ -38,7 +36,7 @@
 
     override val itemCount: Int get() = state.layoutInfo.totalItemsCount
 
-    override fun getTargetItemOffset(index: Int): Int? =
+    override fun getOffsetForItem(index: Int): Int? =
         state.layoutInfo.findVisibleItem(index)?.offset?.let {
             if (state.isVertical) it.y else it.x
         }
@@ -50,13 +48,7 @@
     }
 
     override fun expectedDistanceTo(index: Int, targetScrollOffset: Int): Float {
-        val layoutInfo = state.layoutInfo
-        val visibleItems = layoutInfo.visibleItemsInfo
-        val itemSizeSum = visibleItems.fastSumBy {
-            if (state.isVertical) it.size.height else it.size.width
-        }
-        val averageMainAxisItemSize =
-            itemSizeSum / visibleItems.size + layoutInfo.mainAxisItemSpacing
+        val averageMainAxisItemSize = averageItemSize
 
         val lineDiff = index / state.laneCount - firstVisibleItemIndex / state.laneCount
         var coercedOffset = minOf(abs(targetScrollOffset), averageMainAxisItemSize)
@@ -65,9 +57,17 @@
             coercedOffset - firstVisibleItemScrollOffset
     }
 
-    override val numOfItemsForTeleport: Int get() = 100 * state.laneCount
-
     override suspend fun scroll(block: suspend ScrollScope.() -> Unit) {
         state.scroll(block = block)
     }
+
+    override val averageItemSize: Int
+        get() {
+            val layoutInfo = state.layoutInfo
+            val visibleItems = layoutInfo.visibleItemsInfo
+            val itemSizeSum = visibleItems.fastSumBy {
+                if (state.isVertical) it.size.height else it.size.width
+            }
+            return itemSizeSum / visibleItems.size + layoutInfo.mainAxisItemSpacing
+        }
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt
index 754220e..0e2273b 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridState.kt
@@ -23,7 +23,7 @@
 import androidx.compose.foundation.interaction.InteractionSource
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.lazy.layout.AwaitFirstLayoutModifier
-import androidx.compose.foundation.lazy.layout.LazyAnimateScrollScope
+import androidx.compose.foundation.lazy.layout.LazyLayoutAnimateScrollScope
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsInfo
 import androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider
 import androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList
@@ -156,7 +156,7 @@
     override var canScrollBackward: Boolean by mutableStateOf(false)
         private set
 
-    /** implementation of [LazyAnimateScrollScope] scope required for [animateScrollToItem] */
+    /** implementation of [LazyLayoutAnimateScrollScope] scope required for [animateScrollToItem] */
     private val animateScrollScope = LazyStaggeredGridAnimateScrollScope(this)
 
     internal var remeasurement: Remeasurement? = null
@@ -303,6 +303,7 @@
         }
     }
 
+    private val numOfItemsToTeleport: Int get() = 100 * laneCount
     /**
      * Animate (smooth scroll) to the given item.
      *
@@ -316,7 +317,7 @@
         index: Int,
         scrollOffset: Int = 0
     ) {
-        animateScrollScope.animateScrollToItem(index, scrollOffset)
+        animateScrollScope.animateScrollToItem(index, scrollOffset, numOfItemsToTeleport, density)
     }
 
     internal fun ScrollScope.snapToItemInternal(index: Int, scrollOffset: Int) {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
index f9e81a1..58431d0 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerState.kt
@@ -17,18 +17,18 @@
 package androidx.compose.foundation.pager
 
 import androidx.compose.animation.core.AnimationSpec
-import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.animate
 import androidx.compose.animation.core.spring
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.MutatePriority
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.ScrollScope
 import androidx.compose.foundation.gestures.ScrollableState
-import androidx.compose.foundation.gestures.animateScrollBy
 import androidx.compose.foundation.gestures.snapping.SnapPositionInLayout
 import androidx.compose.foundation.interaction.InteractionSource
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.lazy.layout.AwaitFirstLayoutModifier
+import androidx.compose.foundation.lazy.layout.LazyLayoutAnimateScrollScope
 import androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsInfo
 import androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList
 import androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState
@@ -186,6 +186,7 @@
      */
     internal var upDownDifference: Offset by mutableStateOf(Offset.Zero)
     internal var snapRemainingScrollOffset by mutableFloatStateOf(0f)
+    private var animateScrollScope = PagerLazyAnimateScrollScope(this)
 
     private var isScrollingForward: Boolean by mutableStateOf(false)
 
@@ -429,10 +430,12 @@
             "pageOffsetFraction $pageOffsetFraction is not within the range -0.5 to 0.5"
         }
         val targetPage = page.coerceInPageRange()
-        scrollPosition.requestPosition(
-            targetPage,
-            (pageAvailableSpace * pageOffsetFraction).roundToInt()
-        )
+        val offset = (pageAvailableSpace * pageOffsetFraction).roundToInt()
+        snapToItem(targetPage, offset)
+    }
+
+    internal fun snapToItem(page: Int, offset: Int) {
+        scrollPosition.requestPosition(page, offset)
         remeasurement?.forceRemeasure()
     }
 
@@ -453,7 +456,7 @@
     suspend fun animateScrollToPage(
         page: Int,
         pageOffsetFraction: Float = 0f,
-        animationSpec: AnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow)
+        animationSpec: AnimationSpec<Float> = spring()
     ) {
         if (page == currentPage && currentPageOffsetFraction == pageOffsetFraction ||
             pageCount == 0
@@ -462,48 +465,14 @@
         require(pageOffsetFraction in -0.5..0.5) {
             "pageOffsetFraction $pageOffsetFraction is not within the range -0.5 to 0.5"
         }
-        var currentPosition = currentPage
         val targetPage = page.coerceInPageRange()
-        var currentPositionOffsetFraction = currentPageOffsetFraction
         animationTargetPage = targetPage
-        // If our future page is too far off, that is, outside of the current viewport
-        val firstVisiblePageIndex = visiblePages.first().index
-        val lastVisiblePageIndex = visiblePages.last().index
-        if (((page > currentPage && page > lastVisiblePageIndex) ||
-                (page < currentPage && page < firstVisiblePageIndex)) &&
-            abs(page - currentPage) >= MaxPagesForAnimateScroll
-        ) {
-            val preJumpPosition = if (page > currentPage) {
-                (page - visiblePages.size).coerceAtLeast(currentPosition)
-            } else {
-                page + visiblePages.size.coerceAtMost(currentPosition)
-            }
-
-            debugLog {
-                "animateScrollToPage with pre-jump to position=$preJumpPosition"
-            }
-
-            // Pre-jump to 1 viewport away from destination page, if possible
-            scrollToPage(preJumpPosition)
-            currentPosition = preJumpPosition
-            currentPositionOffsetFraction = 0.0f
-        }
-
-        val targetOffset = targetPage * pageAvailableSpace
-        val currentOffset = currentPosition * pageAvailableSpace
-
-        val targetPageOffsetToSnappedPosition = pageOffsetFraction * pageAvailableSpace
-
-        val offsetFromFraction = currentPositionOffsetFraction * pageAvailableSpace
-
-        // The final delta displacement will be the difference between the pages offsets
-        // discounting whatever offset the original page had scrolled plus the offset
-        // fraction requested by the user.
-        val displacement =
-            targetOffset - currentOffset - offsetFromFraction + targetPageOffsetToSnappedPosition
-
-        debugLog { "animateScrollToPage $displacement pixels" }
-        animateScrollBy(displacement, animationSpec)
+        val targetPageOffsetToSnappedPosition = (pageOffsetFraction * pageAvailableSpace).toInt()
+        animateScrollScope.animateScrollToItem(
+            targetPage,
+            targetPageOffsetToSnappedPosition,
+            animationSpec
+        )
         animationTargetPage = -1
     }
 
@@ -716,3 +685,79 @@
         println("PagerState: ${generateMsg()}")
     }
 }
+
+@OptIn(ExperimentalFoundationApi::class)
+private class PagerLazyAnimateScrollScope(val state: PagerState) : LazyLayoutAnimateScrollScope {
+
+    override val firstVisibleItemIndex: Int get() = state.firstVisiblePage
+
+    override val firstVisibleItemScrollOffset: Int get() = state.firstVisiblePageOffset
+
+    override val lastVisibleItemIndex: Int get() = state.layoutInfo.visiblePagesInfo.last().index
+
+    override val itemCount: Int get() = state.pageCount
+
+    override fun getOffsetForItem(index: Int): Int? {
+        return state.layoutInfo.visiblePagesInfo.fastFirstOrNull { it.index == index }?.offset
+    }
+
+    override fun ScrollScope.snapToItem(index: Int, scrollOffset: Int) {
+        state.snapToItem(index, scrollOffset)
+    }
+
+    override fun expectedDistanceTo(index: Int, targetScrollOffset: Int): Float {
+        return (index - state.currentPage) * averageItemSize.toFloat() + targetScrollOffset
+    }
+
+    override suspend fun scroll(block: suspend ScrollScope.() -> Unit) {
+        state.scroll(block = block)
+    }
+
+    override val averageItemSize: Int
+        get() = state.pageSize + state.pageSpacing
+}
+
+private suspend fun LazyLayoutAnimateScrollScope.animateScrollToItem(
+    index: Int,
+    offset: Int,
+    animationSpec: AnimationSpec<Float>
+) {
+    scroll {
+        val forward = index > firstVisibleItemIndex
+        val visiblePages = lastVisibleItemIndex - firstVisibleItemIndex + 1
+        if (((forward && index > lastVisibleItemIndex) ||
+                (!forward && index < firstVisibleItemIndex)) &&
+            abs(index - firstVisibleItemIndex) >= MaxPagesForAnimateScroll
+        ) {
+            val preJumpPosition = if (forward) {
+                (index - visiblePages).coerceAtLeast(firstVisibleItemIndex)
+            } else {
+                (index + visiblePages).coerceAtMost(firstVisibleItemIndex)
+            }
+
+            debugLog {
+                "animateScrollToPage with pre-jump to position=$preJumpPosition"
+            }
+
+            // Pre-jump to 1 viewport away from destination page, if possible
+            snapToItem(preJumpPosition, 0)
+        }
+        val targetPage = index
+        val pageAvailableSpace = averageItemSize
+        val currentPosition = firstVisibleItemIndex
+        val targetOffset = targetPage * pageAvailableSpace
+        val currentOffset = currentPosition * pageAvailableSpace
+
+        // The final delta displacement will be the difference between the pages offsets
+        // discounting whatever offset the original page had scrolled plus the offset
+        // fraction requested by the user.
+        val displacement =
+            (targetOffset - currentOffset - firstVisibleItemScrollOffset + offset).toFloat()
+
+        debugLog { "animateScrollToPage $displacement pixels" }
+        var previousValue = 0f
+        animate(0f, displacement, animationSpec = animationSpec) { currentValue, _ ->
+            previousValue += scrollBy(currentValue - previousValue)
+        }
+    }
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicSecureTextField.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicSecureTextField.kt
index 9f5d4b3..566184b9 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicSecureTextField.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicSecureTextField.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text.platformDefaultKeyMapping
 import androidx.compose.foundation.text2.input.CodepointTransformation
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldBuffer
 import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldLineLimits
@@ -97,8 +97,8 @@
  * @param keyboardType The keyboard type to be used in this text field. It is set to
  * [KeyboardType.Password] by default. Use [KeyboardType.NumberPassword] for numerical password
  * fields.
- * @param filter Optional [TextEditFilter] that will be used to filter changes to the
- * [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
+ * @param inputTransformation Optional [InputTransformation] that will be used to filter changes to
+ * the [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
  * software keyboard events, pasting or dropping text, accessibility services, and tests. The filter
  * will _not_ be applied when changing the [state] programmatically, or when the filter is changed.
  * If the filter is changed on an existing text field, it will be applied to the next user edit.
@@ -125,6 +125,8 @@
  * innerTextField exactly once.
  */
 @ExperimentalFoundationApi
+// This takes a composable lambda, but it is not primarily a container.
+@Suppress("ComposableLambdaParameterPosition")
 @Composable
 fun BasicSecureTextField(
     state: TextFieldState,
@@ -134,14 +136,16 @@
     textObfuscationMode: TextObfuscationMode = TextObfuscationMode.RevealLastTyped,
     keyboardType: KeyboardType = KeyboardType.Password,
     enabled: Boolean = true,
-    filter: TextEditFilter? = null,
+    inputTransformation: InputTransformation? = null,
     textStyle: TextStyle = TextStyle.Default,
     interactionSource: MutableInteractionSource? = null,
     cursorBrush: Brush = SolidColor(Color.Black),
-    scrollState: ScrollState = rememberScrollState(),
     onTextLayout: Density.(getResult: () -> TextLayoutResult?) -> Unit = {},
     decorationBox: @Composable (innerTextField: @Composable () -> Unit) -> Unit =
-        @Composable { innerTextField -> innerTextField() }
+        @Composable { innerTextField -> innerTextField() },
+    scrollState: ScrollState = rememberScrollState(),
+    // Last parameter must not be a function unless it's intended to be commonly used as a trailing
+    // lambda.
 ) {
     val coroutineScope = rememberCoroutineScope()
     val secureTextFieldController = remember(coroutineScope) {
@@ -190,10 +194,9 @@
             modifier = secureTextFieldModifier,
             enabled = enabled,
             readOnly = false,
-            filter = if (revealLastTypedEnabled) {
-                filter?.then(secureTextFieldController.passwordRevealFilter)
-                    ?: secureTextFieldController.passwordRevealFilter
-            } else filter,
+            inputTransformation = if (revealLastTypedEnabled) {
+                inputTransformation.then(secureTextFieldController.passwordRevealFilter)
+            } else inputTransformation,
             textStyle = textStyle,
             interactionSource = interactionSource,
             cursorBrush = cursorBrush,
@@ -218,7 +221,7 @@
     coroutineScope: CoroutineScope
 ) {
     /**
-     * A special [TextEditFilter] that tracks changes to the content to identify the last typed
+     * A special [InputTransformation] that tracks changes to the content to identify the last typed
      * character to reveal. `scheduleHide` lambda is delegated to a member function to be able to
      * use [passwordRevealFilter] instance.
      */
@@ -272,12 +275,12 @@
 @OptIn(ExperimentalFoundationApi::class)
 internal class PasswordRevealFilter(
     val scheduleHide: () -> Unit
-) : TextEditFilter {
+) : InputTransformation {
     // TODO: Consider setting this as a tracking annotation in AnnotatedString.
     internal var revealCodepointIndex by mutableIntStateOf(-1)
         private set
 
-    override fun filter(
+    override fun transformInput(
         originalValue: TextFieldCharSequence,
         valueWithChanges: TextFieldBuffer
     ) {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt
index dab3579..41c7433 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt
@@ -37,7 +37,7 @@
 import androidx.compose.foundation.text.selection.SelectionHandleInfoKey
 import androidx.compose.foundation.text.textFieldMinSize
 import androidx.compose.foundation.text2.input.CodepointTransformation
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldLineLimits
 import androidx.compose.foundation.text2.input.TextFieldLineLimits.MultiLine
 import androidx.compose.foundation.text2.input.TextFieldLineLimits.SingleLine
@@ -91,8 +91,8 @@
  * the field through the [value] parameter. If an unexpected [value] is passed in during this time,
  * the contents of the field will _not_ be updated to reflect the value until editing is done. When
  * editing is done (i.e. focus is lost), the field will be updated to the last [value] received. Use
- * a [filter] to accept or reject changes during editing. For more direct control of the field
- * contents use the [BasicTextField2] overload that accepts a [TextFieldState].
+ * a [inputTransformation] to accept or reject changes during editing. For more direct control of
+ * the field contents use the [BasicTextField2] overload that accepts a [TextFieldState].
  *
  * Unlike [TextFieldValue] overload, this composable does not let the developer control selection,
  * cursor, and text composition information. Please check [TextFieldValue] and corresponding
@@ -101,15 +101,15 @@
  * @param value The input [String] text to be shown in the text field.
  * @param onValueChange The callback that is triggered when the user or the system updates the
  * text. The updated text is passed as a parameter of the callback. The value passed to the callback
- * will already have had the [filter] applied.
+ * will already have had the [inputTransformation] applied.
  * @param modifier optional [Modifier] for this text field.
  * @param enabled controls the enabled state of the [BasicTextField2]. When `false`, the text
  * field will be neither editable nor focusable, the input of the text field will not be selectable.
  * @param readOnly controls the editable state of the [BasicTextField2]. When `true`, the text
  * field can not be modified, however, a user can focus it and copy text from it. Read-only text
  * fields are usually used to display pre-filled forms that user can not edit.
- * @param filter Optional [TextEditFilter] that will be used to filter changes to the
- * [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
+ * @param inputTransformation Optional [InputTransformation] that will be used to filter changes to
+ * the [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
  * software keyboard events, pasting or dropping text, accessibility services, and tests. The filter
  * will _not_ be applied when a new [value] is passe din, or when the filter is changed.
  * If the filter is changed on an existing text field, it will be applied to the next user edit, it
@@ -150,6 +150,8 @@
  * innerTextField exactly once.
  */
 @ExperimentalFoundationApi
+// This takes a composable lambda, but it is not primarily a container.
+@Suppress("ComposableLambdaParameterPosition")
 @Composable
 fun BasicTextField2(
     value: String,
@@ -157,7 +159,7 @@
     modifier: Modifier = Modifier,
     enabled: Boolean = true,
     readOnly: Boolean = false,
-    filter: TextEditFilter? = null,
+    inputTransformation: InputTransformation? = null,
     textStyle: TextStyle = TextStyle.Default,
     keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
     keyboardActions: KeyboardActions = KeyboardActions.Default,
@@ -165,10 +167,12 @@
     onTextLayout: Density.(getResult: () -> TextLayoutResult?) -> Unit = {},
     interactionSource: MutableInteractionSource? = null,
     cursorBrush: Brush = SolidColor(Color.Black),
-    scrollState: ScrollState = rememberScrollState(),
     codepointTransformation: CodepointTransformation? = null,
     decorationBox: @Composable (innerTextField: @Composable () -> Unit) -> Unit =
-        @Composable { innerTextField -> innerTextField() }
+        @Composable { innerTextField -> innerTextField() },
+    scrollState: ScrollState = rememberScrollState(),
+    // Last parameter must not be a function unless it's intended to be commonly used as a trailing
+    // lambda.
 ) {
     val state = remember {
         TextFieldState(
@@ -206,7 +210,7 @@
         ),
         enabled = enabled,
         readOnly = readOnly,
-        filter = filter,
+        inputTransformation = inputTransformation,
         textStyle = textStyle,
         keyboardOptions = keyboardOptions,
         keyboardActions = keyboardActions,
@@ -235,8 +239,8 @@
  * the field through the [value] parameter. If an unexpected [value] is passed in during this time,
  * the contents of the field will _not_ be updated to reflect the value until editing is done. When
  * editing is done (i.e. focus is lost), the field will be updated to the last [value] received. Use
- * a [filter] to accept or reject changes during editing. For more direct control of the field
- * contents use the [BasicTextField2] overload that accepts a [TextFieldState].
+ * a [inputTransformation] to accept or reject changes during editing. For more direct control of
+ * the field contents use the [BasicTextField2] overload that accepts a [TextFieldState].
  *
  * This function ignores the [TextFieldValue.composition] property from [value]. The composition
  * will, however, be reported in [onValueChange].
@@ -245,15 +249,16 @@
  * the cursor position or selection.
  * @param onValueChange The callback that is triggered when the user or the system updates the
  * text, cursor, or selection. The updated [TextFieldValue] is passed as a parameter of the
- * callback. The value passed to the callback will already have had the [filter] applied.
+ * callback. The value passed to the callback will already have had the [inputTransformation]
+ * applied.
  * @param modifier optional [Modifier] for this text field.
  * @param enabled controls the enabled state of the [BasicTextField2]. When `false`, the text
  * field will be neither editable nor focusable, the input of the text field will not be selectable.
  * @param readOnly controls the editable state of the [BasicTextField2]. When `true`, the text
  * field can not be modified, however, a user can focus it and copy text from it. Read-only text
  * fields are usually used to display pre-filled forms that user can not edit.
- * @param filter Optional [TextEditFilter] that will be used to filter changes to the
- * [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
+ * @param inputTransformation Optional [InputTransformation] that will be used to filter changes to
+ * the [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
  * software keyboard events, pasting or dropping text, accessibility services, and tests. The filter
  * will _not_ be applied when a new [value] is passed in, or when the filter is changed.
  * If the filter is changed on an existing text field, it will be applied to the next user edit, it
@@ -294,6 +299,8 @@
  * innerTextField exactly once.
  */
 @ExperimentalFoundationApi
+// This takes a composable lambda, but it is not primarily a container.
+@Suppress("ComposableLambdaParameterPosition")
 @Composable
 fun BasicTextField2(
     value: TextFieldValue,
@@ -301,7 +308,7 @@
     modifier: Modifier = Modifier,
     enabled: Boolean = true,
     readOnly: Boolean = false,
-    filter: TextEditFilter? = null,
+    inputTransformation: InputTransformation? = null,
     textStyle: TextStyle = TextStyle.Default,
     keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
     keyboardActions: KeyboardActions = KeyboardActions.Default,
@@ -309,10 +316,12 @@
     onTextLayout: Density.(getResult: () -> TextLayoutResult?) -> Unit = {},
     interactionSource: MutableInteractionSource? = null,
     cursorBrush: Brush = SolidColor(Color.Black),
-    scrollState: ScrollState = rememberScrollState(),
     codepointTransformation: CodepointTransformation? = null,
     decorationBox: @Composable (innerTextField: @Composable () -> Unit) -> Unit =
-        @Composable { innerTextField -> innerTextField() }
+        @Composable { innerTextField -> innerTextField() },
+    scrollState: ScrollState = rememberScrollState(),
+    // Last parameter must not be a function unless it's intended to be commonly used as a trailing
+    // lambda.
 ) {
     val state = remember {
         TextFieldState(
@@ -331,7 +340,7 @@
         ),
         enabled = enabled,
         readOnly = readOnly,
-        filter = filter,
+        inputTransformation = inputTransformation,
         textStyle = textStyle,
         keyboardOptions = keyboardOptions,
         keyboardActions = keyboardActions,
@@ -364,8 +373,8 @@
  * @param readOnly controls the editable state of the [BasicTextField2]. When `true`, the text
  * field can not be modified, however, a user can focus it and copy text from it. Read-only text
  * fields are usually used to display pre-filled forms that user can not edit.
- * @param filter Optional [TextEditFilter] that will be used to filter changes to the
- * [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
+ * @param inputTransformation Optional [InputTransformation] that will be used to filter changes to
+ * the [TextFieldState] made by the user. The filter will be applied to changes made by hardware and
  * software keyboard events, pasting or dropping text, accessibility services, and tests. The filter
  * will _not_ be applied when changing the [state] programmatically, or when the filter is changed.
  * If the filter is changed on an existing text field, it will be applied to the next user edit.
@@ -406,13 +415,15 @@
  * innerTextField exactly once.
  */
 @ExperimentalFoundationApi
+// This takes a composable lambda, but it is not primarily a container.
+@Suppress("ComposableLambdaParameterPosition")
 @Composable
 fun BasicTextField2(
     state: TextFieldState,
     modifier: Modifier = Modifier,
     enabled: Boolean = true,
     readOnly: Boolean = false,
-    filter: TextEditFilter? = null,
+    inputTransformation: InputTransformation? = null,
     textStyle: TextStyle = TextStyle.Default,
     keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
     keyboardActions: KeyboardActions = KeyboardActions.Default,
@@ -420,10 +431,12 @@
     onTextLayout: Density.(getResult: () -> TextLayoutResult?) -> Unit = {},
     interactionSource: MutableInteractionSource? = null,
     cursorBrush: Brush = SolidColor(Color.Black),
-    scrollState: ScrollState = rememberScrollState(),
     codepointTransformation: CodepointTransformation? = null,
     decorationBox: @Composable (innerTextField: @Composable () -> Unit) -> Unit =
-        @Composable { innerTextField -> innerTextField() }
+        @Composable { innerTextField -> innerTextField() },
+    scrollState: ScrollState = rememberScrollState(),
+    // Last parameter must not be a function unless it's intended to be commonly used as a trailing
+    // lambda.
 ) {
     val density = LocalDensity.current
     val layoutDirection = LocalLayoutDirection.current
@@ -439,7 +452,7 @@
         TextFieldSelectionState(
             textFieldState = state,
             textLayoutState = textLayoutState,
-            textEditFilter = filter,
+            textEditFilter = inputTransformation,
             density = density,
             editable = enabled && !readOnly,
             isFocused = isFocused
@@ -454,7 +467,7 @@
         textFieldSelectionState.hapticFeedBack = currentHapticFeedback
         textFieldSelectionState.clipboardManager = currentClipboardManager
         textFieldSelectionState.textToolbar = currentTextToolbar
-        textFieldSelectionState.textEditFilter = filter
+        textFieldSelectionState.textEditFilter = inputTransformation
         textFieldSelectionState.density = density
         textFieldSelectionState.editable = enabled && !readOnly
     }
@@ -472,7 +485,7 @@
                 textFieldState = state,
                 textLayoutState = textLayoutState,
                 textFieldSelectionState = textFieldSelectionState,
-                filter = filter,
+                filter = inputTransformation,
                 enabled = enabled,
                 readOnly = readOnly,
                 keyboardOptions = keyboardOptions,
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/AllCapsFilter.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/AllCapsTransformation.kt
similarity index 82%
rename from compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/AllCapsFilter.kt
rename to compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/AllCapsTransformation.kt
index bcc68a2..8bc8ce2 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/AllCapsFilter.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/AllCapsTransformation.kt
@@ -24,7 +24,7 @@
 import androidx.compose.ui.text.toUpperCase
 
 /**
- * Returns a [TextEditFilter] that forces all text to be uppercase.
+ * Returns a [InputTransformation] that forces all text to be uppercase.
  *
  * This filter automatically configures the keyboard to capitalize all characters.
  *
@@ -32,16 +32,17 @@
  */
 @ExperimentalFoundationApi
 @Stable
-fun TextEditFilter.Companion.allCaps(locale: Locale): TextEditFilter = AllCapsFilter(locale)
+fun InputTransformation.Companion.allCaps(locale: Locale): InputTransformation =
+    AllCapsFilter(locale)
 
 // This is a very naive implementation for now, not intended to be production-ready.
 @OptIn(ExperimentalFoundationApi::class)
-private data class AllCapsFilter(private val locale: Locale) : TextEditFilter {
+private data class AllCapsFilter(private val locale: Locale) : InputTransformation {
     override val keyboardOptions = KeyboardOptions(
         capitalization = KeyboardCapitalization.Characters
     )
 
-    override fun filter(
+    override fun transformInput(
         originalValue: TextFieldCharSequence,
         valueWithChanges: TextFieldBuffer
     ) {
@@ -54,5 +55,5 @@
         valueWithChanges.selectCodepointsIn(selection)
     }
 
-    override fun toString(): String = "TextEditFilter.allCaps(locale=$locale)"
+    override fun toString(): String = "InputTransformation.allCaps(locale=$locale)"
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextEditFilter.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
similarity index 60%
rename from compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextEditFilter.kt
rename to compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
index c9f0889..cb2939c 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextEditFilter.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/InputTransformation.kt
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-@file:OptIn(ExperimentalFoundationApi::class)
-
 package androidx.compose.foundation.text2.input
 
 import androidx.compose.foundation.ExperimentalFoundationApi
@@ -26,21 +24,21 @@
  * A function that is ran after every change made to a [TextFieldState] by user input and can change
  * or reject that input.
  *
- * Filters are ran after hardware and software keyboard events, when text is pasted or dropped into
- * the field, or when an accessibility service changes the text.
+ * Input transformations are ran after hardware and software keyboard events, when text is pasted or
+ * dropped into the field, or when an accessibility service changes the text.
  *
  * To chain filters together, call [then].
  *
  * Prebuilt filters are provided for common filter operations. See:
- *  - `TextEditFilter`.[maxLengthInChars]`()`
- *  - `TextEditFilter`.[maxLengthInCodepoints]`()`
- *  - `TextEditFilter`.[allCaps]`()`
+ *  - [InputTransformation].[maxLengthInChars]`()`
+ *  - [InputTransformation].[maxLengthInCodepoints]`()`
+ *  - [InputTransformation].[allCaps]`()`
  *
  * @sample androidx.compose.foundation.samples.BasicTextField2CustomFilterSample
  */
 @ExperimentalFoundationApi
 @Stable
-fun interface TextEditFilter {
+fun interface InputTransformation {
 
     /**
      * Optional [KeyboardOptions] that will be used as the default keyboard options for configuring
@@ -49,7 +47,7 @@
     val keyboardOptions: KeyboardOptions? get() = null
 
     /**
-     * The filter operation. For more information see the documentation on [TextEditFilter].
+     * The transform operation. For more information see the documentation on [InputTransformation].
      *
      * To reject all changes in [valueWithChanges], call
      * `valueWithChanges.`[revertAllChanges][TextFieldBuffer.revertAllChanges].
@@ -58,7 +56,7 @@
      * @param valueWithChanges The value of the field after the change. This value can be changed
      * in-place to alter or reject the changes or set the selection.
      */
-    fun filter(originalValue: TextFieldCharSequence, valueWithChanges: TextFieldBuffer)
+    fun transformInput(originalValue: TextFieldCharSequence, valueWithChanges: TextFieldBuffer)
 
     companion object
 }
@@ -67,32 +65,54 @@
  * Creates a filter chain that will run [next] after this. Filters are applied sequentially, so any
  * changes made by this filter will be visible to [next].
  *
+ * The returned filter will use the [KeyboardOptions] from [next] if non-null, otherwise it will
+ * use the options from this transformation.
+ *
  * @sample androidx.compose.foundation.samples.BasicTextField2FilterChainingSample
  *
- * @param next The [TextEditFilter] that will be ran after this one.
- * @param keyboardOptions The [KeyboardOptions] options to use for the chained filter. If not
- * specified, the chained filter will not specify any [KeyboardOptions], even if one or both of
- * this or [next] specified some.
+ * @param next The [InputTransformation] that will be ran after this one.
  */
 @ExperimentalFoundationApi
 @Stable
-fun TextEditFilter.then(
-    next: TextEditFilter,
-    keyboardOptions: KeyboardOptions? = null
-): TextEditFilter = FilterChain(this, next, keyboardOptions)
[email protected]("thenOrNull")
+fun InputTransformation?.then(next: InputTransformation?): InputTransformation? = when {
+    this == null -> next
+    next == null -> this
+    else -> this.then(next)
+}
 
+/**
+ * Creates a filter chain that will run [next] after this. Filters are applied sequentially, so any
+ * changes made by this filter will be visible to [next].
+ *
+ * The returned filter will use the [KeyboardOptions] from [next] if non-null, otherwise it will
+ * use the options from this transformation.
+ *
+ * @sample androidx.compose.foundation.samples.BasicTextField2FilterChainingSample
+ *
+ * @param next The [InputTransformation] that will be ran after this one.
+ */
+@ExperimentalFoundationApi
+@Stable
+fun InputTransformation.then(next: InputTransformation): InputTransformation =
+    FilterChain(this, next)
+
+@OptIn(ExperimentalFoundationApi::class)
 private class FilterChain(
-    private val first: TextEditFilter,
-    private val second: TextEditFilter,
-    override val keyboardOptions: KeyboardOptions?
-) : TextEditFilter {
+    private val first: InputTransformation,
+    private val second: InputTransformation,
+) : InputTransformation {
 
-    override fun filter(
+    override val keyboardOptions: KeyboardOptions?
+        // TODO(b/295951492) Do proper merging.
+        get() = second.keyboardOptions ?: first.keyboardOptions
+
+    override fun transformInput(
         originalValue: TextFieldCharSequence,
         valueWithChanges: TextFieldBuffer
     ) {
-        first.filter(originalValue, valueWithChanges)
-        second.filter(originalValue, valueWithChanges)
+        first.transformInput(originalValue, valueWithChanges)
+        second.transformInput(originalValue, valueWithChanges)
     }
 
     override fun toString(): String = "$first.then($second)"
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/MaxLengthFilter.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/MaxLengthTransformation.kt
similarity index 78%
rename from compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/MaxLengthFilter.kt
rename to compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/MaxLengthTransformation.kt
index fe2011e..fcf93a6 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/MaxLengthFilter.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/MaxLengthTransformation.kt
@@ -20,25 +20,25 @@
 import androidx.compose.runtime.Stable
 
 /**
- * Returns [TextEditFilter] that rejects input which causes the total length of the text field to be
+ * Returns [InputTransformation] that rejects input which causes the total length of the text field to be
  * more than [maxLength] characters.
  *
  * @see maxLengthInCodepoints
  */
 @ExperimentalFoundationApi
 @Stable
-fun TextEditFilter.Companion.maxLengthInChars(maxLength: Int): TextEditFilter =
+fun InputTransformation.Companion.maxLengthInChars(maxLength: Int): InputTransformation =
     MaxLengthFilter(maxLength, inCodepoints = false)
 
 /**
- * Returns a [TextEditFilter] that rejects input which causes the total length of the text field to
+ * Returns a [InputTransformation] that rejects input which causes the total length of the text field to
  * be more than [maxLength] codepoints.
  *
  * @see maxLengthInChars
  */
 @ExperimentalFoundationApi
 @Stable
-fun TextEditFilter.Companion.maxLengthInCodepoints(maxLength: Int): TextEditFilter =
+fun InputTransformation.Companion.maxLengthInCodepoints(maxLength: Int): InputTransformation =
     MaxLengthFilter(maxLength, inCodepoints = true)
 
 // This is a very naive implementation for now, not intended to be production-ready.
@@ -46,13 +46,13 @@
 private data class MaxLengthFilter(
     private val maxLength: Int,
     private val inCodepoints: Boolean
-) : TextEditFilter {
+) : InputTransformation {
 
     init {
         require(maxLength >= 0) { "maxLength must be at least zero, was $maxLength" }
     }
 
-    override fun filter(
+    override fun transformInput(
         originalValue: TextFieldCharSequence,
         valueWithChanges: TextFieldBuffer
     ) {
@@ -65,6 +65,6 @@
 
     override fun toString(): String {
         val name = if (inCodepoints) "maxLengthInCodepoints" else "maxLengthInChars"
-        return "TextEditFilter.$name(maxLength=$maxLength)"
+        return "InputTransformation.$name(maxLength=$maxLength)"
     }
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
index 9d7bbac..4c98edf 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldBuffer.kt
@@ -54,8 +54,7 @@
      * applied to it.
      */
     private val sourceValue: TextFieldCharSequence = initialValue,
-) : CharSequence,
-    Appendable {
+) : Appendable {
 
     private val buffer = PartialGapBuffer(initialValue)
 
@@ -69,12 +68,12 @@
      * The number of characters in the text field. This will be equal to or greater than
      * [codepointLength].
      */
-    override val length: Int get() = buffer.length
+    val length: Int get() = buffer.length
 
     /**
      * The number of codepoints in the text field. This will be equal to or less than [length].
      */
-    val codepointLength: Int get() = Character.codePointCount(this, 0, length)
+    val codepointLength: Int get() = Character.codePointCount(buffer, 0, length)
 
     /**
      * The [ChangeList] represents the changes made to this value and is inherently mutable. This
@@ -212,13 +211,19 @@
         selectionInChars = TextRange(selStart, selEnd)
     }
 
-    override operator fun get(index: Int): Char = buffer[index]
-
-    override fun subSequence(startIndex: Int, endIndex: Int): CharSequence =
-        buffer.toString().subSequence(startIndex, endIndex)
+    /**
+     * Returns the [Char] at [index] in this buffer.
+     */
+    fun charAt(index: Int): Char = buffer[index]
 
     override fun toString(): String = buffer.toString()
 
+    /**
+     * Returns a [CharSequence] backed by this buffer. Any subsequent changes to this buffer will
+     * be visible in the returned sequence as well.
+     */
+    fun asCharSequence(): CharSequence = buffer
+
     private fun clearChangeList() {
         changeTracker?.clearChanges()
     }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
index 31d8246..f234dc8 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
@@ -18,14 +18,20 @@
 
 package androidx.compose.foundation.text2.input
 
+import androidx.annotation.VisibleForTesting
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.text2.input.internal.EditProcessor
+import androidx.compose.foundation.text2.input.internal.EditingBuffer
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.Stable
+import androidx.compose.runtime.collection.mutableVectorOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.saveable.SaverScope
 import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
 import androidx.compose.runtime.snapshotFlow
 import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.coerceIn
 import androidx.compose.ui.text.input.TextFieldValue
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.collectLatest
@@ -57,8 +63,16 @@
     initialText: String = "",
     initialSelectionInChars: TextRange = TextRange.Zero
 ) {
-    internal var editProcessor =
-        EditProcessor(TextFieldCharSequence(initialText, initialSelectionInChars))
+
+    /**
+     * The editing buffer used for applying editor commands from IME. All edits coming from gestures
+     * or IME commands, must be reflected on this buffer eventually.
+     */
+    @VisibleForTesting
+    internal var mainBuffer: EditingBuffer = EditingBuffer(
+        text = initialText,
+        selection = initialSelectionInChars.coerceIn(0, initialText.length)
+    )
 
     /**
      * The current text and selection. This value will automatically update when the user enters
@@ -78,8 +92,10 @@
      * @see forEachTextValue
      * @see textAsFlow
      */
-    val text: TextFieldCharSequence
-        get() = editProcessor.value
+    var text: TextFieldCharSequence by mutableStateOf(
+        TextFieldCharSequence(initialText, initialSelectionInChars)
+    )
+        private set
 
     /**
      * Runs [block] with a mutable version of the current state. The block can make changes to the
@@ -109,19 +125,199 @@
      * If the text or selection in [newValue] was actually modified, updates this state's internal
      * values. If [newValue] was not modified at all, the state is not updated, and this will not
      * invalidate anyone who is observing this state.
+     *
+     * @param newValue [TextFieldBuffer] that contains the latest updates
      */
     @Suppress("ShowingMemberInHiddenClass")
     @PublishedApi
     internal fun commitEdit(newValue: TextFieldBuffer) {
         val textChanged = newValue.changes.changeCount > 0
-        val selectionChanged = newValue.selectionInChars != editProcessor.mBuffer.selection
+        val selectionChanged = newValue.selectionInChars != mainBuffer.selection
         if (textChanged || selectionChanged) {
             val finalValue = newValue.toTextFieldCharSequence()
-            editProcessor.reset(finalValue)
+            resetStateAndNotifyIme(finalValue)
         }
     }
 
     /**
+     * An edit block that updates [TextFieldState] on behalf of user actions such as gestures,
+     * IME commands, hardware keyboard events, clipboard actions, and more. These modifications
+     * must also run through the given [filter] since they are user actions.
+     *
+     * Be careful that this method is not snapshot aware. It is only safe to call this from main
+     * thread, or global snapshot. Also, this function is defined as inline for performance gains,
+     * and it's not actually safe to early return from [block].
+     *
+     * @param inputTransformation [InputTransformation] to run after [block] is applied
+     * @param notifyImeOfChanges Whether IME should be notified of these changes. Only pass false to
+     * this argument if the source of the changes is IME itself.
+     * @param block The function that updates the current editing buffer.
+     */
+    internal inline fun editAsUser(
+        inputTransformation: InputTransformation?,
+        notifyImeOfChanges: Boolean = true,
+        block: EditingBuffer.() -> Unit
+    ) {
+        val previousValue = text
+
+        mainBuffer.changeTracker.clearChanges()
+        mainBuffer.block()
+
+        if (mainBuffer.changeTracker.changeCount == 0 &&
+            previousValue.selectionInChars == mainBuffer.selection &&
+            previousValue.compositionInChars == mainBuffer.composition) {
+            // nothing has changed after applying block.
+            return
+        }
+
+        commitEditAsUser(inputTransformation, notifyImeOfChanges)
+    }
+
+    private fun commitEditAsUser(
+        inputTransformation: InputTransformation?,
+        notifyImeOfChanges: Boolean
+    ) {
+        val afterEditValue = TextFieldCharSequence(
+            text = mainBuffer.toString(),
+            selection = mainBuffer.selection,
+            composition = mainBuffer.composition
+        )
+
+        if (inputTransformation == null) {
+            val oldValue = text
+            text = afterEditValue
+            if (notifyImeOfChanges) {
+                notifyIme(oldValue, afterEditValue)
+            }
+            return
+        }
+
+        val oldValue = text
+
+        // if only difference is composition, don't run filter
+        if (afterEditValue.contentEquals(oldValue) &&
+            afterEditValue.selectionInChars == oldValue.selectionInChars
+        ) {
+            text = afterEditValue
+            if (notifyImeOfChanges) {
+                notifyIme(oldValue, afterEditValue)
+            }
+            return
+        }
+
+        val mutableValue = TextFieldBuffer(
+            initialValue = afterEditValue,
+            sourceValue = oldValue,
+            initialChanges = mainBuffer.changeTracker
+        )
+        inputTransformation.transformInput(
+            originalValue = oldValue,
+            valueWithChanges = mutableValue
+        )
+        // If neither the text nor the selection changed, we want to preserve the composition.
+        // Otherwise, the IME will reset it anyway.
+        val afterFilterValue = mutableValue.toTextFieldCharSequence(
+            afterEditValue.compositionInChars
+        )
+        if (afterFilterValue == afterEditValue) {
+            text = afterFilterValue
+            if (notifyImeOfChanges) {
+                notifyIme(oldValue, afterEditValue)
+            }
+        } else {
+            resetStateAndNotifyIme(afterFilterValue)
+        }
+    }
+
+    internal fun addNotifyImeListener(notifyImeListener: NotifyImeListener) {
+        notifyImeListeners.add(notifyImeListener)
+    }
+
+    internal fun removeNotifyImeListener(notifyImeListener: NotifyImeListener) {
+        notifyImeListeners.remove(notifyImeListener)
+    }
+
+    /**
+     * A listener that can be attached to a [TextFieldState] to listen for change events that may
+     * interest IME.
+     *
+     * State in [TextFieldState] can change through various means but categorically there are two
+     * sources; Developer([TextFieldState.edit]) and User([TextFieldState.editAsUser]). Only
+     * non-filtered IME sourced changes can skip updating the IME. Otherwise, all changes must be
+     * contacted to IME to let it synchronize its state with the [TextFieldState]. Such
+     * communication is built by IME registering a [NotifyImeListener] on a [TextFieldState].
+     */
+    internal fun interface NotifyImeListener {
+
+        fun onChange(oldValue: TextFieldCharSequence, newValue: TextFieldCharSequence)
+    }
+
+    /**
+     * Must be called whenever [text] needs to change but the content of the changes are not yet
+     * replicated on [mainBuffer].
+     *
+     * This method updates the internal editing buffer with the given [TextFieldCharSequence], it
+     * also notifies the IME about the selection or composition changes.
+     */
+    @VisibleForTesting
+    internal fun resetStateAndNotifyIme(newValue: TextFieldCharSequence) {
+        val bufferState = TextFieldCharSequence(
+            mainBuffer.toString(),
+            mainBuffer.selection,
+            mainBuffer.composition
+        )
+
+        var textChanged = false
+        var selectionChanged = false
+        val compositionChanged = newValue.compositionInChars != mainBuffer.composition
+
+        if (!bufferState.contentEquals(newValue)) {
+            // reset the buffer in its entirety
+            mainBuffer = EditingBuffer(
+                text = newValue.toString(),
+                selection = newValue.selectionInChars
+            )
+            textChanged = true
+        } else if (bufferState.selectionInChars != newValue.selectionInChars) {
+            mainBuffer.setSelection(newValue.selectionInChars.start, newValue.selectionInChars.end)
+            selectionChanged = true
+        }
+
+        val composition = newValue.compositionInChars
+        if (composition == null || composition.collapsed) {
+            mainBuffer.commitComposition()
+        } else {
+            mainBuffer.setComposition(composition.min, composition.max)
+        }
+
+        if (textChanged || (!selectionChanged && compositionChanged)) {
+            mainBuffer.commitComposition()
+        }
+
+        val finalValue = TextFieldCharSequence(
+            if (textChanged) newValue else bufferState,
+            mainBuffer.selection,
+            mainBuffer.composition
+        )
+
+        // value must be set before notifyImeListeners are called. Even though we are sending the
+        // previous and current values, a system callback may request the latest state e.g. IME
+        // restartInput call is handled before notifyImeListeners return.
+        text = finalValue
+
+        notifyIme(bufferState, finalValue)
+    }
+
+    private val notifyImeListeners = mutableVectorOf<NotifyImeListener>()
+
+    private fun notifyIme(
+        oldValue: TextFieldCharSequence,
+        newValue: TextFieldCharSequence
+    ) {
+        notifyImeListeners.forEach { it.onChange(oldValue, newValue) }
+    }
+
+    /**
      * Saves and restores a [TextFieldState] for [rememberSaveable].
      *
      * @see rememberTextFieldState
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/ApplyEditCommand.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/ApplyEditCommand.kt
deleted file mode 100644
index 4e3c363..0000000
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/ApplyEditCommand.kt
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text2.input.internal
-
-import androidx.compose.foundation.text.findFollowingBreak
-import androidx.compose.foundation.text.findPrecedingBreak
-
-/**
- * Applies a given [EditCommand] on this [EditingBuffer].
- *
- * Usually calls a dedicated extension function for a given subclass of [EditCommand].
- *
- * @throws IllegalArgumentException if EditCommand is not recognized.
- */
-internal fun EditingBuffer.update(editCommand: EditCommand) {
-    when (editCommand) {
-        is BackspaceCommand -> applyBackspaceCommand()
-        is CommitTextCommand -> applyCommitTextCommand(editCommand)
-        is DeleteAllCommand -> replace(0, length, "")
-        is DeleteSurroundingTextCommand -> applyDeleteSurroundingTextCommand(editCommand)
-        is DeleteSurroundingTextInCodePointsCommand ->
-            applyDeleteSurroundingTextInCodePointsCommand(editCommand)
-        is FinishComposingTextCommand -> commitComposition()
-        is MoveCursorCommand -> applyMoveCursorCommand(editCommand)
-        is SetComposingRegionCommand -> applySetComposingRegionCommand(editCommand)
-        is SetComposingTextCommand -> applySetComposingTextCommand(editCommand)
-        is SetSelectionCommand -> applySetSelectionCommand(editCommand)
-    }
-}
-
-private fun EditingBuffer.applySetSelectionCommand(setSelectionCommand: SetSelectionCommand) {
-    // Sanitize the input: reverse if reversed, clamped into valid range.
-    val clampedStart = setSelectionCommand.start.coerceIn(0, length)
-    val clampedEnd = setSelectionCommand.end.coerceIn(0, length)
-    if (clampedStart < clampedEnd) {
-        setSelection(clampedStart, clampedEnd)
-    } else {
-        setSelection(clampedEnd, clampedStart)
-    }
-}
-
-private fun EditingBuffer.applySetComposingTextCommand(
-    setComposingTextCommand: SetComposingTextCommand
-) {
-    val text = setComposingTextCommand.text
-    val newCursorPosition = setComposingTextCommand.newCursorPosition
-
-    if (hasComposition()) {
-        // API doc says, if there is ongoing composing text, replace it with new text.
-        val compositionStart = compositionStart
-        replace(compositionStart, compositionEnd, text)
-        if (text.isNotEmpty()) {
-            setComposition(compositionStart, compositionStart + text.length)
-        }
-    } else {
-        // If there is no composing text, insert composing text into cursor position with
-        // removing selected text if any.
-        val selectionStart = selectionStart
-        replace(selectionStart, selectionEnd, text)
-        if (text.isNotEmpty()) {
-            setComposition(selectionStart, selectionStart + text.length)
-        }
-    }
-
-    // After replace function is called, the editing buffer places the cursor at the end of the
-    // modified range.
-    val newCursor = cursor
-
-    // See above API description for the meaning of newCursorPosition.
-    val newCursorInBuffer = if (newCursorPosition > 0) {
-        newCursor + newCursorPosition - 1
-    } else {
-        newCursor + newCursorPosition - text.length
-    }
-
-    cursor = newCursorInBuffer.coerceIn(0, length)
-}
-
-private fun EditingBuffer.applySetComposingRegionCommand(
-    setComposingRegionCommand: SetComposingRegionCommand
-) {
-    // The API description says, different from SetComposingText, SetComposingRegion must
-    // preserve the ongoing composition text and set new composition.
-    if (hasComposition()) {
-        commitComposition()
-    }
-
-    // Sanitize the input: reverse if reversed, clamped into valid range, ignore empty range.
-    val clampedStart = setComposingRegionCommand.start.coerceIn(0, length)
-    val clampedEnd = setComposingRegionCommand.end.coerceIn(0, length)
-    if (clampedStart == clampedEnd) {
-        // do nothing. empty composition range is not allowed.
-    } else if (clampedStart < clampedEnd) {
-        setComposition(clampedStart, clampedEnd)
-    } else {
-        setComposition(clampedEnd, clampedStart)
-    }
-}
-
-private fun EditingBuffer.applyMoveCursorCommand(moveCursorCommand: MoveCursorCommand) {
-    if (cursor == -1) {
-        cursor = selectionStart
-    }
-
-    var newCursor = selectionStart
-    val bufferText = toString()
-    if (moveCursorCommand.amount > 0) {
-        for (i in 0 until moveCursorCommand.amount) {
-            val next = bufferText.findFollowingBreak(newCursor)
-            if (next == -1) break
-            newCursor = next
-        }
-    } else {
-        for (i in 0 until -moveCursorCommand.amount) {
-            val prev = bufferText.findPrecedingBreak(newCursor)
-            if (prev == -1) break
-            newCursor = prev
-        }
-    }
-
-    cursor = newCursor
-}
-
-private fun EditingBuffer.applyDeleteSurroundingTextInCodePointsCommand(
-    deleteSurroundingTextInCodePointsCommand: DeleteSurroundingTextInCodePointsCommand
-) {
-    // Convert code point length into character length. Then call the common logic of the
-    // DeleteSurroundingTextEditOp
-    var beforeLenInChars = 0
-    for (i in 0 until deleteSurroundingTextInCodePointsCommand.lengthBeforeCursor) {
-        beforeLenInChars++
-        if (selectionStart > beforeLenInChars) {
-            val lead = this[selectionStart - beforeLenInChars - 1]
-            val trail = this[selectionStart - beforeLenInChars]
-
-            if (isSurrogatePair(lead, trail)) {
-                beforeLenInChars++
-            }
-        }
-        if (beforeLenInChars == selectionStart) break
-    }
-
-    var afterLenInChars = 0
-    for (i in 0 until deleteSurroundingTextInCodePointsCommand.lengthAfterCursor) {
-        afterLenInChars++
-        if (selectionEnd + afterLenInChars < length) {
-            val lead = this[selectionEnd + afterLenInChars - 1]
-            val trail = this[selectionEnd + afterLenInChars]
-
-            if (isSurrogatePair(lead, trail)) {
-                afterLenInChars++
-            }
-        }
-        if (selectionEnd + afterLenInChars == length) break
-    }
-
-    delete(selectionEnd, selectionEnd + afterLenInChars)
-    delete(selectionStart - beforeLenInChars, selectionStart)
-}
-
-private fun EditingBuffer.applyDeleteSurroundingTextCommand(
-    deleteSurroundingTextCommand: DeleteSurroundingTextCommand
-) {
-    // calculate the end with safe addition since lengthAfterCursor can be set to e.g. Int.MAX
-    // by the input
-    val end = selectionEnd.addExactOrElse(deleteSurroundingTextCommand.lengthAfterCursor) { length }
-    delete(selectionEnd, minOf(end, length))
-
-    // calculate the start with safe subtraction since lengthBeforeCursor can be set to e.g.
-    // Int.MAX by the input
-    val start = selectionStart.subtractExactOrElse(
-        deleteSurroundingTextCommand.lengthBeforeCursor
-    ) { 0 }
-    delete(maxOf(0, start), selectionStart)
-}
-
-private fun EditingBuffer.applyBackspaceCommand() {
-    if (hasComposition()) {
-        delete(compositionStart, compositionEnd)
-        return
-    }
-
-    if (cursor == -1) {
-        val delStart = selectionStart
-        val delEnd = selectionEnd
-        cursor = selectionStart
-        delete(delStart, delEnd)
-        return
-    }
-
-    if (cursor == 0) {
-        return
-    }
-
-    val prevCursorPos = toString().findPrecedingBreak(cursor)
-    delete(prevCursorPos, cursor)
-}
-
-private fun EditingBuffer.applyCommitTextCommand(commitTextCommand: CommitTextCommand) {
-    // API description says replace ongoing composition text if there. Then, if there is no
-    // composition text, insert text into cursor position or replace selection.
-    if (hasComposition()) {
-        replace(compositionStart, compositionEnd, commitTextCommand.text)
-    } else {
-        // In this editing buffer, insert into cursor or replace selection are equivalent.
-        replace(selectionStart, selectionEnd, commitTextCommand.text)
-    }
-
-    // After replace function is called, the editing buffer places the cursor at the end of the
-    // modified range.
-    val newCursor = cursor
-
-    // See above API description for the meaning of newCursorPosition.
-    val newCursorInBuffer = if (commitTextCommand.newCursorPosition > 0) {
-        newCursor + commitTextCommand.newCursorPosition - 1
-    } else {
-        newCursor + commitTextCommand.newCursorPosition - commitTextCommand.text.length
-    }
-
-    cursor = newCursorInBuffer.coerceIn(0, length)
-}
-
-/**
- * Helper function that returns true when [high] is a Unicode high-surrogate code unit and [low]
- * is a Unicode low-surrogate code unit.
- */
-private fun isSurrogatePair(high: Char, low: Char): Boolean =
-    high.isHighSurrogate() && low.isLowSurrogate()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditCommand.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditCommand.kt
index 6381663..9983ff8 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditCommand.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditCommand.kt
@@ -16,46 +16,42 @@
 
 package androidx.compose.foundation.text2.input.internal
 
-import androidx.compose.ui.text.AnnotatedString
-
-/**
- * [EditCommand] is a command representation for the platform IME API function calls. The commands
- * from the IME as function calls are translated into command pattern. For example, as a result of
- * commit text function call by IME [CommitTextCommand] is created.
- */
-// TODO(halilibo): Consider value class or some other alternatives like passing the buffer into
-//  InputConnection, eliminating the need for EditCommand.
-internal sealed interface EditCommand
+import androidx.compose.foundation.text.findFollowingBreak
+import androidx.compose.foundation.text.findPrecedingBreak
 
 /**
  * Commit final [text] to the text box and set the new cursor position.
  *
  * See [`commitText`](https://developer.android.com/reference/android/view/inputmethod/InputConnection.html#commitText(java.lang.CharSequence,%20int)).
  *
- * @param annotatedString The text to commit.
+ * @param text The text to commit.
  * @param newCursorPosition The cursor position after inserted text.
  */
-internal data class CommitTextCommand(
-    val annotatedString: AnnotatedString,
-    val newCursorPosition: Int
-) : EditCommand {
-
-    constructor(
-        /**
-         * The text to commit. We ignore any styles in the original API.
-         */
-        text: String,
-        /**
-         * The cursor position after setting composing text.
-         */
-        newCursorPosition: Int
-    ) : this(AnnotatedString(text), newCursorPosition)
-
-    val text: String get() = annotatedString.text
-
-    override fun toString(): String {
-        return "CommitTextCommand(text='$text', newCursorPosition=$newCursorPosition)"
+internal fun EditingBuffer.commitText(
+    text: String,
+    newCursorPosition: Int
+) {
+    // API description says replace ongoing composition text if there. Then, if there is no
+    // composition text, insert text into cursor position or replace selection.
+    if (hasComposition()) {
+        replace(compositionStart, compositionEnd, text)
+    } else {
+        // In this editing buffer, insert into cursor or replace selection are equivalent.
+        replace(selectionStart, selectionEnd, text)
     }
+
+    // After replace function is called, the editing buffer places the cursor at the end of the
+    // modified range.
+    val newCursor = cursor
+
+    // See above API description for the meaning of newCursorPosition.
+    val newCursorInBuffer = if (newCursorPosition > 0) {
+        newCursor + newCursorPosition - 1
+    } else {
+        newCursor + newCursorPosition - text.length
+    }
+
+    cursor = newCursorInBuffer.coerceIn(0, length)
 }
 
 /**
@@ -66,13 +62,25 @@
  * @param start The inclusive start offset of the composing region.
  * @param end The exclusive end offset of the composing region
  */
-internal data class SetComposingRegionCommand(
-    val start: Int,
-    val end: Int
-) : EditCommand {
+internal fun EditingBuffer.setComposingRegion(
+    start: Int,
+    end: Int
+) {
+    // The API description says, different from SetComposingText, SetComposingRegion must
+    // preserve the ongoing composition text and set new composition.
+    if (hasComposition()) {
+        commitComposition()
+    }
 
-    override fun toString(): String {
-        return "SetComposingRegionCommand(start=$start, end=$end)"
+    // Sanitize the input: reverse if reversed, clamped into valid range, ignore empty range.
+    val clampedStart = start.coerceIn(0, length)
+    val clampedEnd = end.coerceIn(0, length)
+    if (clampedStart == clampedEnd) {
+        // do nothing. empty composition range is not allowed.
+    } else if (clampedStart < clampedEnd) {
+        setComposition(clampedStart, clampedEnd)
+    } else {
+        setComposition(clampedEnd, clampedStart)
     }
 }
 
@@ -82,30 +90,42 @@
  *
  * See [`setComposingText`](https://developer.android.com/reference/android/view/inputmethod/InputConnection.html#setComposingText(java.lang.CharSequence,%2520int)).
  *
- * @param annotatedString The composing text.
+ * @param text The composing text.
  * @param newCursorPosition The cursor position after setting composing text.
  */
-internal data class SetComposingTextCommand(
-    val annotatedString: AnnotatedString,
-    val newCursorPosition: Int
-) : EditCommand {
-
-    constructor(
-        /**
-         * The composing text.
-         */
-        text: String,
-        /**
-         * The cursor position after setting composing text.
-         */
-        newCursorPosition: Int
-    ) : this(AnnotatedString(text), newCursorPosition)
-
-    val text: String get() = annotatedString.text
-
-    override fun toString(): String {
-        return "SetComposingTextCommand(text='$text', newCursorPosition=$newCursorPosition)"
+internal fun EditingBuffer.setComposingText(
+    text: String,
+    newCursorPosition: Int
+) {
+    if (hasComposition()) {
+        // API doc says, if there is ongoing composing text, replace it with new text.
+        val compositionStart = compositionStart
+        replace(compositionStart, compositionEnd, text)
+        if (text.isNotEmpty()) {
+            setComposition(compositionStart, compositionStart + text.length)
+        }
+    } else {
+        // If there is no composing text, insert composing text into cursor position with
+        // removing selected text if any.
+        val selectionStart = selectionStart
+        replace(selectionStart, selectionEnd, text)
+        if (text.isNotEmpty()) {
+            setComposition(selectionStart, selectionStart + text.length)
+        }
     }
+
+    // After replace function is called, the editing buffer places the cursor at the end of the
+    // modified range.
+    val newCursor = cursor
+
+    // See above API description for the meaning of newCursorPosition.
+    val newCursorInBuffer = if (newCursorPosition > 0) {
+        newCursor + newCursorPosition - 1
+    } else {
+        newCursor + newCursorPosition - text.length
+    }
+
+    cursor = newCursorInBuffer.coerceIn(0, length)
 }
 
 /**
@@ -122,25 +142,28 @@
  * @param lengthAfterCursor The number of characters in UTF-16 after the cursor to be deleted.
  * Must be non-negative.
  */
-internal data class DeleteSurroundingTextCommand(
-    val lengthBeforeCursor: Int,
-    val lengthAfterCursor: Int
-) : EditCommand {
-    init {
-        require(lengthBeforeCursor >= 0 && lengthAfterCursor >= 0) {
-            "Expected lengthBeforeCursor and lengthAfterCursor to be non-negative, were " +
-                "$lengthBeforeCursor and $lengthAfterCursor respectively."
-        }
+internal fun EditingBuffer.deleteSurroundingText(
+    lengthBeforeCursor: Int,
+    lengthAfterCursor: Int
+) {
+    require(lengthBeforeCursor >= 0 && lengthAfterCursor >= 0) {
+        "Expected lengthBeforeCursor and lengthAfterCursor to be non-negative, were " +
+            "$lengthBeforeCursor and $lengthAfterCursor respectively."
     }
 
-    override fun toString(): String {
-        return "DeleteSurroundingTextCommand(lengthBeforeCursor=$lengthBeforeCursor, " +
-            "lengthAfterCursor=$lengthAfterCursor)"
-    }
+    // calculate the end with safe addition since lengthAfterCursor can be set to e.g. Int.MAX
+    // by the input
+    val end = selectionEnd.addExactOrElse(lengthAfterCursor) { length }
+    delete(selectionEnd, minOf(end, length))
+
+    // calculate the start with safe subtraction since lengthBeforeCursor can be set to e.g.
+    // Int.MAX by the input
+    val start = selectionStart.subtractExactOrElse(lengthBeforeCursor) { 0 }
+    delete(maxOf(0, start), selectionStart)
 }
 
 /**
- * A variant of [DeleteSurroundingTextCommand]. The difference is that
+ * A variant of [deleteSurroundingText]. The difference is that
  * * The lengths are supplied in code points, not in chars.
  * * This command does nothing if there are one or more invalid surrogate pairs
  * in the requested range.
@@ -152,40 +175,47 @@
  * @param lengthAfterCursor The number of characters in Unicode code points after the cursor to be
  * deleted. Must be non-negative.
  */
-internal data class DeleteSurroundingTextInCodePointsCommand(
-    val lengthBeforeCursor: Int,
-    val lengthAfterCursor: Int
-) : EditCommand {
-    init {
-        require(lengthBeforeCursor >= 0 && lengthAfterCursor >= 0) {
-            "Expected lengthBeforeCursor and lengthAfterCursor to be non-negative, were " +
-                "$lengthBeforeCursor and $lengthAfterCursor respectively."
+internal fun EditingBuffer.deleteSurroundingTextInCodePoints(
+    lengthBeforeCursor: Int,
+    lengthAfterCursor: Int
+) {
+    require(lengthBeforeCursor >= 0 && lengthAfterCursor >= 0) {
+        "Expected lengthBeforeCursor and lengthAfterCursor to be non-negative, were " +
+            "$lengthBeforeCursor and $lengthAfterCursor respectively."
+    }
+
+    // Convert code point length into character length. Then call the common logic of the
+    // DeleteSurroundingTextEditOp
+    var beforeLenInChars = 0
+    for (i in 0 until lengthBeforeCursor) {
+        beforeLenInChars++
+        if (selectionStart > beforeLenInChars) {
+            val lead = this[selectionStart - beforeLenInChars - 1]
+            val trail = this[selectionStart - beforeLenInChars]
+
+            if (isSurrogatePair(lead, trail)) {
+                beforeLenInChars++
+            }
         }
+        if (beforeLenInChars == selectionStart) break
     }
 
-    override fun toString(): String {
-        return "DeleteSurroundingTextInCodePointsCommand(lengthBeforeCursor=$lengthBeforeCursor, " +
-            "lengthAfterCursor=$lengthAfterCursor)"
-    }
-}
+    var afterLenInChars = 0
+    for (i in 0 until lengthAfterCursor) {
+        afterLenInChars++
+        if (selectionEnd + afterLenInChars < length) {
+            val lead = this[selectionEnd + afterLenInChars - 1]
+            val trail = this[selectionEnd + afterLenInChars]
 
-/**
- * Sets the selection on the text. When [start] and [end] have the same value, it sets the cursor
- * position.
- *
- * See [`setSelection`](https://developer.android.com/reference/android/view/inputmethod/InputConnection.html#setSelection(int,%2520int)).
- *
- * @param start The inclusive start offset of the selection region.
- * @param end The exclusive end offset of the selection region.
- */
-internal data class SetSelectionCommand(
-    val start: Int,
-    val end: Int
-) : EditCommand {
-
-    override fun toString(): String {
-        return "SetSelectionCommand(start=$start, end=$end)"
+            if (isSurrogatePair(lead, trail)) {
+                afterLenInChars++
+            }
+        }
+        if (selectionEnd + afterLenInChars == length) break
     }
+
+    delete(selectionEnd, selectionEnd + afterLenInChars)
+    delete(selectionStart - beforeLenInChars, selectionStart)
 }
 
 /**
@@ -195,11 +225,8 @@
  *
  * See [`finishComposingText`](https://developer.android.com/reference/android/view/inputmethod/InputConnection.html#finishComposingText()).
  */
-internal object FinishComposingTextCommand : EditCommand {
-
-    override fun toString(): String {
-        return "FinishComposingTextCommand()"
-    }
+internal fun EditingBuffer.finishComposingText() {
+    commitComposition()
 }
 
 /**
@@ -209,10 +236,17 @@
  * If there is no composition but there is selection, delete whole selected range.
  * If there is no composition and selection, perform backspace key event at the cursor position.
  */
-internal object BackspaceCommand : EditCommand {
-
-    override fun toString(): String {
-        return "BackspaceCommand()"
+internal fun EditingBuffer.backspace() {
+    if (hasComposition()) {
+        delete(compositionStart, compositionEnd)
+    } else if (cursor == -1) {
+        val delStart = selectionStart
+        val delEnd = selectionEnd
+        cursor = selectionStart
+        delete(delStart, delEnd)
+    } else if (cursor != 0) {
+        val prevCursorPos = toString().findPrecedingBreak(cursor)
+        delete(prevCursorPos, cursor)
     }
 }
 
@@ -224,18 +258,40 @@
  *
  * @param amount The amount of cursor movement. If you want to move backward, pass negative value.
  */
-internal data class MoveCursorCommand(val amount: Int) : EditCommand {
-    override fun toString(): String {
-        return "MoveCursorCommand(amount=$amount)"
+internal fun EditingBuffer.moveCursor(amount: Int) {
+    if (cursor == -1) {
+        cursor = selectionStart
     }
+
+    var newCursor = selectionStart
+    val bufferText = toString()
+    if (amount > 0) {
+        for (i in 0 until amount) {
+            val next = bufferText.findFollowingBreak(newCursor)
+            if (next == -1) break
+            newCursor = next
+        }
+    } else {
+        for (i in 0 until -amount) {
+            val prev = bufferText.findPrecedingBreak(newCursor)
+            if (prev == -1) break
+            newCursor = prev
+        }
+    }
+
+    cursor = newCursor
 }
 
 /**
  * Deletes all the text in the buffer.
  */
-internal object DeleteAllCommand : EditCommand {
-
-    override fun toString(): String {
-        return "DeleteAllCommand()"
-    }
+internal fun EditingBuffer.deleteAll() {
+    replace(0, length, "")
 }
+
+/**
+ * Helper function that returns true when [high] is a Unicode high-surrogate code unit and [low]
+ * is a Unicode low-surrogate code unit.
+ */
+private fun isSurrogatePair(high: Char, low: Char): Boolean =
+    high.isHighSurrogate() && low.isLowSurrogate()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditProcessor.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditProcessor.kt
deleted file mode 100644
index 27ffb8e..0000000
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditProcessor.kt
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text2.input.internal
-
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.text2.input.TextEditFilter
-import androidx.compose.foundation.text2.input.TextFieldBuffer
-import androidx.compose.foundation.text2.input.TextFieldCharSequence
-import androidx.compose.runtime.collection.mutableVectorOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.text.TextRange
-import androidx.compose.ui.text.input.TextFieldValue
-import androidx.compose.ui.text.input.TextInputService
-import androidx.compose.ui.util.fastForEach
-
-/**
- * Helper class to apply [EditCommand]s on an internal buffer. Used by TextField Composable
- * to combine TextFieldValue lifecycle with the editing operations.
- *
- * When a [TextFieldValue] is suggested by the developer, [reset] should be called.
- * When [TextInputService] provides [EditCommand]s, they should be applied to the internal
- * buffer using [apply].
- */
-@OptIn(ExperimentalFoundationApi::class)
-internal class EditProcessor(
-    initialValue: TextFieldCharSequence = TextFieldCharSequence("", TextRange.Zero),
-) {
-
-    private val valueMutableState = mutableStateOf(initialValue)
-
-    /**
-     * The current state of the internal editing buffer as a [TextFieldCharSequence] backed by
-     * snapshot state, so its readers can get updates in composition context.
-     */
-    var value: TextFieldCharSequence by valueMutableState
-        private set
-
-    // The editing buffer used for applying editor commands from IME.
-    internal var mBuffer: EditingBuffer = EditingBuffer(
-        text = initialValue.toString(),
-        selection = initialValue.selectionInChars
-    )
-        private set
-
-    private val resetListeners = mutableVectorOf<ResetListener>()
-
-    /**
-     * Must be called whenever TextFieldValue needs to change directly, not using EditCommands.
-     *
-     * This method updates the internal editing buffer with the given TextFieldValue.
-     * This method may tell the IME about the selection offset changes or extracted text changes.
-     *
-     * Retro(halilibo); this function seems straightforward but it actually does something very
-     * specific for the previous state hoisting design of TextField. In each recomposition, this
-     * function was supposed to be called from BasicTextField with the new value. However, this new
-     * value wouldn't be new to the internal buffer since the changes coming from IME were already
-     * applied in the previous composition and sent through onValueChange to the hoisted state.
-     *
-     * Therefore, this function has to care for two scenarios. 1) Developer doesn't interfere with
-     * the value and the editing buffer doesn't have to change because previous composition value
-     * is sent back. 2) Developer interferes and the new value is different than the current buffer
-     * state. The difference could be text, selection, or composition.
-     *
-     * In short, `reset` function used to compare newly arrived value in this composition with the
-     * internal buffer for any differences. This won't be necessary anymore since the internal state
-     * is going to be the only source of truth for the new BasicTextField. However, `reset` would
-     * gain a new responsibility in the cases where developer filters the input or adds a template.
-     * This would again introduce a need for sync between internal buffer and the state value.
-     */
-    fun reset(newValue: TextFieldCharSequence) {
-        val bufferState = TextFieldCharSequence(
-            mBuffer.toString(),
-            mBuffer.selection,
-            mBuffer.composition
-        )
-
-        var textChanged = false
-        var selectionChanged = false
-        val compositionChanged = newValue.compositionInChars != mBuffer.composition
-
-        if (!bufferState.contentEquals(newValue)) {
-            // reset the buffer in its entirety
-            mBuffer = EditingBuffer(
-                text = newValue.toString(),
-                selection = newValue.selectionInChars
-            )
-            textChanged = true
-        } else if (bufferState.selectionInChars != newValue.selectionInChars) {
-            mBuffer.setSelection(newValue.selectionInChars.start, newValue.selectionInChars.end)
-            selectionChanged = true
-        }
-
-        val composition = newValue.compositionInChars
-        if (composition == null || composition.collapsed) {
-            mBuffer.commitComposition()
-        } else {
-            mBuffer.setComposition(composition.min, composition.max)
-        }
-
-        // TODO(halilibo): This could be unnecessary when we figure out how to correctly
-        //  communicate composing region changes back to IME.
-        if (textChanged || (!selectionChanged && compositionChanged)) {
-            mBuffer.commitComposition()
-        }
-
-        val finalValue = TextFieldCharSequence(
-            if (textChanged) newValue else bufferState,
-            mBuffer.selection,
-            mBuffer.composition
-        )
-
-        resetListeners.forEach { it.onReset(bufferState, finalValue) }
-
-        value = finalValue
-    }
-
-    /**
-     * Applies a set of [editCommands] to the internal text editing buffer.
-     *
-     * After applying the changes, returns the final state of the editing buffer as a
-     * [TextFieldValue]
-     *
-     * @param editCommands [EditCommand]s to be applied to the editing buffer.
-     *
-     * @return the [TextFieldValue] representation of the final buffer state.
-     */
-    fun update(editCommands: List<EditCommand>, filter: TextEditFilter?) {
-        var lastCommand: EditCommand? = null
-        mBuffer.changeTracker.clearChanges()
-        try {
-            editCommands.fastForEach {
-                lastCommand = it
-                mBuffer.update(it)
-            }
-        } catch (e: Exception) {
-            throw RuntimeException(generateBatchErrorMessage(editCommands, lastCommand), e)
-        }
-
-        val proposedValue = TextFieldCharSequence(
-            text = mBuffer.toString(),
-            selection = mBuffer.selection,
-            composition = mBuffer.composition
-        )
-
-        @Suppress("NAME_SHADOWING")
-        val filter = filter
-        if (filter == null) {
-            value = proposedValue
-        } else {
-            val oldValue = value
-
-            // Don't run filter if nothing changed.
-            if (proposedValue.contentEquals(oldValue) &&
-                proposedValue.selectionInChars == oldValue.selectionInChars
-            ) {
-                value = proposedValue
-                return
-            }
-
-            val mutableValue = TextFieldBuffer(
-                initialValue = proposedValue,
-                sourceValue = oldValue,
-                initialChanges = mBuffer.changeTracker
-            )
-            filter.filter(originalValue = oldValue, valueWithChanges = mutableValue)
-            // If neither the text nor the selection changed, we want to preserve the composition.
-            // Otherwise, the IME will reset it anyway.
-            val newValue = mutableValue.toTextFieldCharSequence(proposedValue.compositionInChars)
-            if (newValue == proposedValue) {
-                value = newValue
-            } else {
-                reset(newValue)
-            }
-        }
-    }
-
-    private fun generateBatchErrorMessage(
-        editCommands: List<EditCommand>,
-        failedCommand: EditCommand?,
-    ): String = buildString {
-        appendLine(
-            "Error while applying EditCommand batch to buffer (" +
-                "length=${mBuffer.length}, " +
-                "composition=${mBuffer.composition}, " +
-                "selection=${mBuffer.selection}):"
-        )
-        @Suppress("ListIterator")
-        editCommands.joinTo(this, separator = "\n") {
-            val prefix = if (failedCommand === it) " > " else "   "
-            prefix + it.toStringForLog()
-        }
-    }
-
-    internal fun addResetListener(resetListener: ResetListener) {
-        resetListeners.add(resetListener)
-    }
-
-    internal fun removeResetListener(resetListener: ResetListener) {
-        resetListeners.remove(resetListener)
-    }
-
-    /**
-     * A listener that can be attached to an EditProcessor to listen for reset events. State in
-     * EditProcessor can change through filters or direct access. Unlike IME events (EditCommands),
-     * these direct changes should be immediately passed onto IME to keep editor state and IME in
-     * sync. Moreover, some changes can even require an input session restart to reset the state
-     * in IME.
-     */
-    internal fun interface ResetListener {
-
-        fun onReset(oldValue: TextFieldCharSequence, newValue: TextFieldCharSequence)
-    }
-}
-
-/**
- * Generate a description of the command that is suitable for logging – this should not include
- * any user-entered text, which may be sensitive.
- */
-internal fun EditCommand.toStringForLog(): String = when (this) {
-    is CommitTextCommand ->
-        "CommitTextCommand(text.length=${text.length}, newCursorPosition=$newCursorPosition)"
-
-    is SetComposingTextCommand ->
-        "SetComposingTextCommand(text.length=${text.length}, " +
-            "newCursorPosition=$newCursorPosition)"
-
-    is SetComposingRegionCommand -> toString()
-    is DeleteSurroundingTextCommand -> toString()
-    is DeleteSurroundingTextInCodePointsCommand -> toString()
-    is SetSelectionCommand -> toString()
-    is FinishComposingTextCommand -> toString()
-    is BackspaceCommand -> toString()
-    is MoveCursorCommand -> toString()
-    is DeleteAllCommand -> toString()
-}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditingBuffer.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditingBuffer.kt
index 34a72d3..49b22ae 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditingBuffer.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/EditingBuffer.kt
@@ -214,15 +214,13 @@
      * The reversed range is not allowed.
      * @param start the inclusive start offset of the selection
      * @param end the exclusive end offset of the selection
-     *
-     * @throws IndexOutOfBoundsException if start or end offset is outside of current buffer.
-     * @throws IllegalArgumentException if start is larger than end. (reversed range)
      */
     fun setSelection(start: Int, end: Int) {
-        checkRange(start, end)
+        val clampedStart = start.coerceIn(0, length)
+        val clampedEnd = end.coerceIn(0, length)
 
-        selectionStart = start
-        selectionEnd = end
+        selectionStart = clampedStart
+        selectionEnd = clampedEnd
     }
 
     /**
@@ -258,15 +256,6 @@
     }
 
     /**
-     * Removes the ongoing composition text and reset the composition range.
-     */
-    fun cancelComposition() {
-        replace(compositionStart, compositionEnd, "")
-        compositionStart = NOWHERE
-        compositionEnd = NOWHERE
-    }
-
-    /**
      * Commits the ongoing composition text and reset the composition range.
      */
     fun commitComposition() {
@@ -290,10 +279,6 @@
                 "end ($end) offset is outside of text region ${gapBuffer.length}"
             )
         }
-
-        if (start > end) {
-            println("Setting reversed range: $start > $end")
-        }
     }
 }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt
index 87fe591..d9341c7 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/GapBuffer.kt
@@ -197,7 +197,7 @@
  *
  * @param text The initial text
  */
-internal class PartialGapBuffer(text: CharSequence) {
+internal class PartialGapBuffer(text: CharSequence) : CharSequence {
     internal companion object {
         const val BUF_SIZE = 255
         const val SURROUNDING_SIZE = 64
@@ -212,7 +212,7 @@
     /**
      * The text length
      */
-    val length: Int
+    override val length: Int
         get() {
             val buffer = buffer ?: return text.length
             return text.length - (bufEnd - bufStart) + buffer.length()
@@ -284,7 +284,7 @@
     /**
      * [] operator for the character at the index.
      */
-    operator fun get(index: Int): Char {
+    override operator fun get(index: Int): Char {
         val buffer = buffer ?: return text[index]
         if (index < bufStart) {
             return text[index]
@@ -296,6 +296,9 @@
         return text[index - (gapBufLength - bufEnd + bufStart)]
     }
 
+    override fun subSequence(startIndex: Int, endIndex: Int): CharSequence =
+        toString().subSequence(startIndex, endIndex)
+
     override fun toString(): String {
         val b = buffer ?: return text.toString()
         val sb = StringBuilder()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt
index 16ce958..e4ef563 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt
@@ -21,7 +21,7 @@
 import androidx.compose.foundation.text.KeyboardActions
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text2.BasicTextField2
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.foundation.text2.input.deselect
 import androidx.compose.foundation.text2.input.internal.selection.TextFieldSelectionState
@@ -87,7 +87,7 @@
     private val textFieldState: TextFieldState,
     private val textLayoutState: TextLayoutState,
     private val textFieldSelectionState: TextFieldSelectionState,
-    private val filter: TextEditFilter?,
+    private val filter: InputTransformation?,
     private val enabled: Boolean,
     private val readOnly: Boolean,
     private val keyboardOptions: KeyboardOptions,
@@ -131,7 +131,7 @@
     var textFieldState: TextFieldState,
     var textLayoutState: TextLayoutState,
     var textFieldSelectionState: TextFieldSelectionState,
-    var filter: TextEditFilter?,
+    var filter: InputTransformation?,
     var enabled: Boolean,
     var readOnly: Boolean,
     keyboardOptions: KeyboardOptions,
@@ -222,7 +222,7 @@
         textFieldState: TextFieldState,
         textLayoutState: TextLayoutState,
         textFieldSelectionState: TextFieldSelectionState,
-        filter: TextEditFilter?,
+        filter: InputTransformation?,
         enabled: Boolean,
         readOnly: Boolean,
         keyboardOptions: KeyboardOptions,
@@ -295,13 +295,10 @@
         setText { newText ->
             if (readOnly || !enabled) return@setText false
 
-            textFieldState.editProcessor.update(
-                listOf(
-                    DeleteAllCommand,
-                    CommitTextCommand(newText, 1)
-                ),
-                filter
-            )
+            textFieldState.editAsUser(filter) {
+                deleteAll()
+                commitText(newText.toString(), 1)
+            }
             true
         }
         setSelection { start, end, _ ->
@@ -316,10 +313,9 @@
             } else if (start.coerceAtMost(end) >= 0 &&
                 start.coerceAtLeast(end) <= text.length
             ) {
-                textFieldState.editProcessor.update(
-                    listOf(SetSelectionCommand(start, end)),
-                    filter
-                )
+                textFieldState.editAsUser(filter) {
+                    setSelection(start, end)
+                }
                 true
             } else {
                 false
@@ -328,15 +324,12 @@
         insertTextAtCursor { newText ->
             if (readOnly || !enabled) return@insertTextAtCursor false
 
-            textFieldState.editProcessor.update(
-                listOf(
-                    // Finish composing text first because when the field is focused the IME
-                    // might set composition.
-                    FinishComposingTextCommand,
-                    CommitTextCommand(newText, 1)
-                ),
-                filter
-            )
+            textFieldState.editAsUser(filter) {
+                // Finish composing text first because when the field is focused the IME
+                // might set composition.
+                commitComposition()
+                commitText(newText.toString(), 1)
+            }
             true
         }
         onImeAction(keyboardOptions.imeAction) {
@@ -426,6 +419,7 @@
         return textFieldKeyEventHandler.onKeyEvent(
             event = event,
             textFieldState = textFieldState,
+            inputTransformation = filter,
             textLayoutState = textLayoutState,
             textFieldSelectionState = textFieldSelectionState,
             editable = enabled && !readOnly,
@@ -471,7 +465,7 @@
 internal expect suspend fun PlatformTextInputSession.platformSpecificTextInputSession(
     state: TextFieldState,
     imeOptions: ImeOptions,
-    filter: TextEditFilter?,
+    filter: InputTransformation?,
     onImeAction: ((ImeAction) -> Unit)?
 ): Nothing
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldKeyEventHandler.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldKeyEventHandler.kt
index ef8b3fd..3c886d6 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldKeyEventHandler.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldKeyEventHandler.kt
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.text.isTypedEvent
 import androidx.compose.foundation.text.platformDefaultKeyMapping
 import androidx.compose.foundation.text.showCharacterPalette
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.foundation.text2.input.internal.TextFieldPreparedSelection.Companion.NoCharacterFound
 import androidx.compose.foundation.text2.input.internal.selection.TextFieldSelectionState
@@ -51,9 +51,9 @@
     private val preparedSelectionState = TextFieldPreparedSelectionState()
     private val deadKeyCombiner = DeadKeyCombiner()
     private val keyMapping = platformDefaultKeyMapping
-    private var filter: TextEditFilter? = null
+    private var filter: InputTransformation? = null
 
-    fun setFilter(filter: TextEditFilter?) {
+    fun setFilter(filter: InputTransformation?) {
         this.filter = filter
     }
 
@@ -76,6 +76,7 @@
     open fun onKeyEvent(
         event: KeyEvent,
         textFieldState: TextFieldState,
+        inputTransformation: InputTransformation?,
         textLayoutState: TextLayoutState,
         textFieldSelectionState: TextFieldSelectionState,
         editable: Boolean,
@@ -85,16 +86,24 @@
         if (event.type != KeyEventType.KeyDown) {
             return false
         }
-        val editCommand = event.toTypedEditCommand()
-        if (editCommand != null) {
-            return if (editable) {
-                editCommand.applyOnto(textFieldState)
-                preparedSelectionState.resetCachedX()
-                true
-            } else {
-                false
+
+        if (event.isTypedEvent) {
+            val codePoint = deadKeyCombiner.consume(event)
+            if (codePoint != null) {
+                val text = StringBuilder(2).appendCodePointX(codePoint).toString()
+                return if (editable) {
+                    textFieldState.editAsUser(filter) {
+                        commitComposition()
+                        commitText(text, 1)
+                    }
+                    preparedSelectionState.resetCachedX()
+                    true
+                } else {
+                    false
+                }
             }
         }
+
         val command = keyMapping.map(event)
         if (command == null || (command.editsText && !editable)) {
             return false
@@ -122,66 +131,77 @@
                 KeyCommand.HOME -> moveCursorToHome()
                 KeyCommand.END -> moveCursorToEnd()
                 KeyCommand.DELETE_PREV_CHAR ->
-                    deleteIfSelectedOr {
-                        DeleteSurroundingTextCommand(
-                            selection.end - getPrecedingCharacterIndex(),
-                            0
-                        )
-                    }?.applyOnto(textFieldState)
-
-                KeyCommand.DELETE_NEXT_CHAR -> {
-                    // Note that some software keyboards, such as Samsungs, go through this code
-                    // path instead of making calls on the InputConnection directly.
-                    deleteIfSelectedOr {
-                        val nextCharacterIndex = getNextCharacterIndex()
-                        // If there's no next character, it means the cursor is at the end of the
-                        // text, and this should be a no-op. See b/199919707.
-                        if (nextCharacterIndex != NoCharacterFound) {
-                            DeleteSurroundingTextCommand(0, nextCharacterIndex - selection.end)
-                        } else {
-                            null
+                    textFieldState.editAsUser(filter) {
+                        if (!deleteIfSelected()) {
+                            deleteSurroundingText(
+                                selection.end - getPrecedingCharacterIndex(),
+                                0
+                            )
                         }
-                    }?.applyOnto(textFieldState)
+                    }
+                KeyCommand.DELETE_NEXT_CHAR -> {
+                    // Note that some software keyboards, such as Samsung, go through this code
+                    // path instead of making calls on the InputConnection directly.
+                    textFieldState.editAsUser(filter) {
+                        if (!deleteIfSelected()) {
+                            val nextCharacterIndex = getNextCharacterIndex()
+                            // If there's no next character, it means the cursor is at the end of the
+                            // text, and this should be a no-op. See b/199919707.
+                            if (nextCharacterIndex != NoCharacterFound) {
+                                deleteSurroundingText(0, nextCharacterIndex - selection.end)
+                            }
+                        }
+                    }
                 }
 
                 KeyCommand.DELETE_PREV_WORD ->
-                    deleteIfSelectedOr {
-                        getPreviousWordOffset()?.let {
-                            DeleteSurroundingTextCommand(selection.end - it, 0)
+                    textFieldState.editAsUser(filter) {
+                        if (!deleteIfSelected()) {
+                            getPreviousWordOffset()?.let {
+                                deleteSurroundingText(selection.end - it, 0)
+                            }
                         }
-                    }?.applyOnto(textFieldState)
-
+                    }
                 KeyCommand.DELETE_NEXT_WORD ->
-                    deleteIfSelectedOr {
-                        getNextWordOffset()?.let {
-                            DeleteSurroundingTextCommand(0, it - selection.end)
+                    textFieldState.editAsUser(filter) {
+                        if (!deleteIfSelected()) {
+                            getNextWordOffset()?.let {
+                                deleteSurroundingText(0, it - selection.end)
+                            }
                         }
-                    }?.applyOnto(textFieldState)
-
+                    }
                 KeyCommand.DELETE_FROM_LINE_START ->
-                    deleteIfSelectedOr {
-                        getLineStartByOffset()?.let {
-                            DeleteSurroundingTextCommand(selection.end - it, 0)
+                    textFieldState.editAsUser(filter) {
+                        if (!deleteIfSelected()) {
+                            getLineStartByOffset()?.let {
+                                deleteSurroundingText(selection.end - it, 0)
+                            }
                         }
-                    }?.applyOnto(textFieldState)
-
+                    }
                 KeyCommand.DELETE_TO_LINE_END ->
-                    deleteIfSelectedOr {
-                        getLineEndByOffset()?.let {
-                            DeleteSurroundingTextCommand(0, it - selection.end)
+                    textFieldState.editAsUser(filter) {
+                        if (!deleteIfSelected()) {
+                            getLineEndByOffset()?.let {
+                                deleteSurroundingText(0, it - selection.end)
+                            }
                         }
-                    }?.applyOnto(textFieldState)
-
+                    }
                 KeyCommand.NEW_LINE ->
                     if (!singleLine) {
-                        CommitTextCommand("\n", 1).applyOnto(textFieldState)
+                        textFieldState.editAsUser(filter) {
+                            commitComposition()
+                            commitText("\n", 1)
+                        }
                     } else {
                         onSubmit()
                     }
 
                 KeyCommand.TAB ->
                     if (!singleLine) {
-                        CommitTextCommand("\t", 1).applyOnto(textFieldState)
+                        textFieldState.editAsUser(filter) {
+                            commitComposition()
+                            commitText("\t", 1)
+                        }
                     } else {
                         consumed = false // let propagate to focus system
                     }
@@ -222,16 +242,6 @@
         return consumed
     }
 
-    private fun KeyEvent.toTypedEditCommand(): CommitTextCommand? {
-        if (!isTypedEvent) {
-            return null
-        }
-
-        val codePoint = deadKeyCombiner.consume(this) ?: return null
-        val text = StringBuilder(2).appendCodePointX(codePoint).toString()
-        return CommitTextCommand(text, 1)
-    }
-
     private inline fun preparedSelectionContext(
         state: TextFieldState,
         textLayoutState: TextLayoutState,
@@ -244,27 +254,10 @@
         )
         preparedSelection.block()
         if (preparedSelection.selection != preparedSelection.initialValue.selectionInChars) {
-            // update the editProcessor with the latest selection state.
-            // this has to be a reset because EditCommands do not inform IME.
-            state.edit {
-                selectCharsIn(preparedSelection.selection)
+            // selection changes are applied atomically at the end of context evaluation
+            state.editAsUser(filter) {
+                setSelection(preparedSelection.selection.start, preparedSelection.selection.end)
             }
         }
     }
-
-    /**
-     * Helper function to apply a list of EditCommands in the scope of [TextFieldPreparedSelection]
-     */
-    private fun List<EditCommand>.applyOnto(state: TextFieldState) {
-        state.editProcessor.update(
-            this.toMutableList().apply {
-                add(0, FinishComposingTextCommand)
-            },
-            filter
-        )
-    }
-
-    private fun EditCommand.applyOnto(state: TextFieldState) {
-        state.editProcessor.update(listOf(FinishComposingTextCommand, this), filter)
-    }
 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt
index a590fd2..63681d0 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt
@@ -89,19 +89,14 @@
     private val text: String = initialValue.toString()
 
     /**
-     * If there is a non-collapsed selection, delete its contents. Or execute the given [or] block.
-     * Either way this function returns list of [EditCommand]s that should be applied on
-     * [TextFieldState].
+     * If there is a non-collapsed selection, delete its contents. If the selection is collapsed,
+     * execute the given [or] block.
      */
-    fun deleteIfSelectedOr(or: TextFieldPreparedSelection.() -> EditCommand?): List<EditCommand>? {
-        return if (selection.collapsed) {
-            or(this)?.let { editCommand -> listOf(editCommand) }
-        } else {
-            listOf(
-                CommitTextCommand("", 0),
-                SetSelectionCommand(selection.min, selection.min)
-            )
-        }
+    fun EditingBuffer.deleteIfSelected(): Boolean {
+        if (selection.collapsed) return false
+        commitText("", 0)
+        setSelection(selection.min, selection.min)
+        return true
     }
 
     /**
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldSelectionState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldSelectionState.kt
index 5adbfb0..02b783d 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldSelectionState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text2/input/internal/selection/TextFieldSelectionState.kt
@@ -29,14 +29,13 @@
 import androidx.compose.foundation.text.selection.getTextFieldSelection
 import androidx.compose.foundation.text.selection.isPrecisePointer
 import androidx.compose.foundation.text.selection.visibleBounds
-import androidx.compose.foundation.text2.input.TextEditFilter
-import androidx.compose.foundation.text2.input.TextFieldBuffer
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldCharSequence
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.foundation.text2.input.getSelectedText
+import androidx.compose.foundation.text2.input.internal.EditingBuffer
 import androidx.compose.foundation.text2.input.internal.TextLayoutState
 import androidx.compose.foundation.text2.input.internal.coerceIn
-import androidx.compose.foundation.text2.input.selectAll
 import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
@@ -72,7 +71,7 @@
 internal class TextFieldSelectionState(
     private val textFieldState: TextFieldState,
     private val textLayoutState: TextLayoutState,
-    var textEditFilter: TextEditFilter?,
+    var textEditFilter: InputTransformation?,
     var density: Density,
     var editable: Boolean,
     var isFocused: Boolean
@@ -384,7 +383,7 @@
                     val cursorIndex = textLayoutState.getOffsetForPosition(offset)
                     // update the state
                     if (cursorIndex >= 0) {
-                        editWithFilter {
+                        editAsUser {
                             selectCharsIn(TextRange(cursorIndex))
                         }
                     }
@@ -411,7 +410,7 @@
                     previousHandleOffset = -1, // there is no previous drag.
                     adjustment = SelectionAdjustment.Word,
                 )
-                editWithFilter {
+                editAsUser {
                     selectCharsIn(newSelection)
                 }
             }
@@ -457,7 +456,7 @@
                     change.consume()
                     // TODO: only perform haptic feedback if filter does not override the change
                     hapticFeedBack?.performHapticFeedback(HapticFeedbackType.TextHandleMove)
-                    editWithFilter {
+                    editAsUser {
                         selectCharsIn(newSelection)
                     }
                 }
@@ -499,7 +498,7 @@
                     val offset = textLayoutState.getOffsetForPosition(dragStartOffset)
 
                     hapticFeedBack?.performHapticFeedback(HapticFeedbackType.TextHandleMove)
-                    editWithFilter {
+                    editAsUser {
                         selectCharsIn(TextRange(offset))
                     }
                     showCursorHandle = true
@@ -521,7 +520,7 @@
                         previousHandleOffset = -1, // there is no previous drag.
                         adjustment = SelectionAdjustment.CharacterWithWordAccelerate,
                     )
-                    editWithFilter {
+                    editAsUser {
                         selectCharsIn(newSelection)
                     }
                     showCursorHandle = false
@@ -619,7 +618,7 @@
                 // Do not allow selection to collapse on itself while dragging. Selection can
                 // reverse but does not collapse.
                 if (prevSelection.collapsed || !newSelection.collapsed) {
-                    editWithFilter {
+                    editAsUser {
                         selectCharsIn(newSelection)
                     }
                 }
@@ -698,7 +697,7 @@
                     // Do not allow selection to collapse on itself while dragging selection
                     // handles. Selection can reverse but does not collapse.
                     if (prevSelection.collapsed || !newSelection.collapsed) {
-                        editWithFilter {
+                        editAsUser {
                             selectCharsIn(newSelection)
                         }
                     }
@@ -931,9 +930,9 @@
 
         clipboardManager?.setText(AnnotatedString(text.getSelectedText().toString()))
 
-        editWithFilter {
-            replace(selectionInChars.min, selectionInChars.max, "")
-            selectCharsIn(TextRange(selectionInChars.min))
+        editAsUser {
+            replace(selection.min, selection.max, "")
+            selectCharsIn(TextRange(selection.min))
         }
         // TODO(halilibo): undoManager force snapshot
     }
@@ -956,8 +955,8 @@
 
         if (!cancelSelection) return
 
-        editWithFilter {
-            selectCharsIn(TextRange(selectionInChars.max))
+        editAsUser {
+            selectCharsIn(TextRange(selection.max))
         }
     }
 
@@ -973,7 +972,7 @@
     fun paste() {
         val clipboardText = clipboardManager?.getText()?.text ?: return
 
-        editWithFilter {
+        editAsUser {
             val selection = textFieldState.text.selectionInChars
             replace(
                 selection.min,
@@ -1018,7 +1017,7 @@
 
         val selectAll: (() -> Unit)? = if (selection.length != textFieldState.text.length) {
             {
-                editWithFilter { selectAll() }
+                editAsUser { selectCharsIn(TextRange(0, length)) }
                 showCursorHandleToolbar = false
             }
         } else null
@@ -1035,7 +1034,7 @@
     fun deselect() {
         val selection = textFieldState.text.selectionInChars
         if (!selection.collapsed) {
-            editWithFilter {
+            editAsUser {
                 selectCharsIn(TextRange(selection.end))
             }
         }
@@ -1047,23 +1046,8 @@
     /**
      * Edits the TextFieldState content with a filter applied if available.
      */
-    private fun editWithFilter(block: TextFieldBuffer.() -> Unit) {
-        val filter = textEditFilter
-        if (filter == null) {
-            textFieldState.edit(block)
-        } else {
-            val originalValue = textFieldState.text
-            // create a new buffer to pass to TextEditFilter after edit ops
-            val buffer = TextFieldBuffer(originalValue)
-            buffer.block()
-
-            // finally filter the buffer's current status
-            textEditFilter?.filter(originalValue, buffer)
-
-            // reset the TextFieldState with the buffer's final value
-            val newValue = buffer.toTextFieldCharSequence(originalValue.compositionInChars)
-            textFieldState.editProcessor.reset(newValue)
-        }
+    private fun editAsUser(block: EditingBuffer.() -> Unit) {
+        textFieldState.editAsUser(textEditFilter, block = block)
     }
 
     private fun hideTextToolbar() {
@@ -1122,6 +1106,10 @@
 
 private fun TextRange.reverse() = TextRange(end, start)
 
+private fun EditingBuffer.selectCharsIn(range: TextRange) {
+    setSelection(range.start, range.end)
+}
+
 private val DEBUG = false
 private val DEBUG_TAG = "TextFieldSelectionState"
 
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/text2/input/internal/DesktopTextInputSession.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/text2/input/internal/DesktopTextInputSession.desktop.kt
index d0a9509..9b902c0 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/text2/input/internal/DesktopTextInputSession.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/text2/input/internal/DesktopTextInputSession.desktop.kt
@@ -19,7 +19,7 @@
 package androidx.compose.foundation.text2.input.internal
 
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.text2.input.TextEditFilter
+import androidx.compose.foundation.text2.input.InputTransformation
 import androidx.compose.foundation.text2.input.TextFieldState
 import androidx.compose.ui.platform.PlatformTextInputSession
 import androidx.compose.ui.text.input.ImeAction
@@ -32,7 +32,7 @@
 internal actual suspend fun PlatformTextInputSession.platformSpecificTextInputSession(
     state: TextFieldState,
     imeOptions: ImeOptions,
-    filter: TextEditFilter?,
+    filter: InputTransformation?,
     onImeAction: ((ImeAction) -> Unit)?
 ): Nothing {
     // TODO(b/267235947) Wire up desktop.
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
new file mode 100644
index 0000000..6a7defe
--- /dev/null
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/InputTransformationTest.kt
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.foundation.text2.input
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.text.KeyboardOptions
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+
+@OptIn(ExperimentalFoundationApi::class)
+class InputTransformationTest {
+
+    @Test
+    fun chainedFilters_areEqual() {
+        val filter1 = InputTransformation { _, _ ->
+            // Noop
+        }
+        val filter2 = InputTransformation { _, _ ->
+            // Noop
+        }
+
+        val chain1 = filter1.then(filter2)
+        val chain2 = filter1.then(filter2)
+
+        assertThat(chain1).isEqualTo(chain2)
+    }
+
+    @Test
+    fun chainedFilters_areNotEqual_whenFiltersAreDifferent() {
+        val filter1 = InputTransformation { _, _ ->
+            // Noop
+        }
+        val filter2 = InputTransformation { _, _ ->
+            // Noop
+        }
+        val filter3 = InputTransformation { _, _ ->
+            // Noop
+        }
+
+        val chain1 = filter1.then(filter2)
+        val chain2 = filter1.then(filter3)
+
+        assertThat(chain1).isNotEqualTo(chain2)
+    }
+
+    @Test
+    fun chainedFilters_haveNullKeyboardOptions_whenBothOptionsAreNull() {
+        val filter1 = object : InputTransformation {
+            override val keyboardOptions = null
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+        val filter2 = object : InputTransformation {
+            override val keyboardOptions = null
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+
+        val chain = filter1.then(filter2)
+
+        assertThat(chain.keyboardOptions).isNull()
+    }
+
+    @Test
+    fun chainedFilters_takeFirstKeyboardOptions_whenSecondOptionsAreNull() {
+        val options = KeyboardOptions()
+        val filter1 = object : InputTransformation {
+            override val keyboardOptions = options
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+        val filter2 = object : InputTransformation {
+            override val keyboardOptions = null
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+
+        val chain = filter1.then(filter2)
+
+        assertThat(chain.keyboardOptions).isSameInstanceAs(options)
+    }
+
+    @Test
+    fun chainedFilters_takeSecondKeyboardOptions_whenFirstOptionsAreNull() {
+        val options = KeyboardOptions()
+        val filter1 = object : InputTransformation {
+            override val keyboardOptions = null
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+        val filter2 = object : InputTransformation {
+            override val keyboardOptions = options
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+
+        val chain = filter1.then(filter2)
+
+        assertThat(chain.keyboardOptions).isSameInstanceAs(options)
+    }
+
+    @Test
+    fun chainedFilters_takeSecondKeyboardOptions_whenFirstOptionsAreNotNull() {
+        val options1 = KeyboardOptions()
+        val options2 = KeyboardOptions()
+        val filter1 = object : InputTransformation {
+            override val keyboardOptions = options1
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+        val filter2 = object : InputTransformation {
+            override val keyboardOptions = options2
+
+            override fun transformInput(
+                originalValue: TextFieldCharSequence,
+                valueWithChanges: TextFieldBuffer
+            ) {
+            }
+        }
+
+        val chain = filter1.then(filter2)
+
+        assertThat(chain.keyboardOptions).isSameInstanceAs(options2)
+    }
+}
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextEditFilterTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextEditFilterTest.kt
deleted file mode 100644
index d5c1c74..0000000
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextEditFilterTest.kt
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text2.input
-
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.ui.text.input.KeyboardType
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-
-@OptIn(ExperimentalFoundationApi::class)
-class TextEditFilterTest {
-
-    @Test
-    fun chainedFilters_areEqual() {
-        val filter1 = TextEditFilter { _, _ ->
-            // Noop
-        }
-        val filter2 = TextEditFilter { _, _ ->
-            // Noop
-        }
-
-        val chain1 = filter1.then(
-            filter2,
-            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email)
-        )
-        val chain2 = filter1.then(
-            filter2,
-            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email)
-        )
-
-        assertThat(chain1).isEqualTo(chain2)
-    }
-
-    @Test
-    fun chainedFilters_areNotEqual_whenKeyboardOptionsDifferent() {
-        val filter1 = TextEditFilter { _, _ ->
-            // Noop
-        }
-        val filter2 = TextEditFilter { _, _ ->
-            // Noop
-        }
-
-        val chain1 = filter1.then(
-            filter2,
-            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email)
-        )
-        val chain2 = filter1.then(
-            filter2,
-            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
-        )
-
-        assertThat(chain1).isNotEqualTo(chain2)
-    }
-
-    @Test
-    fun chainedFilters_areNotEqual_whenFiltersAreDifferent() {
-        val filter1 = TextEditFilter { _, _ ->
-            // Noop
-        }
-        val filter2 = TextEditFilter { _, _ ->
-            // Noop
-        }
-        val filter3 = TextEditFilter { _, _ ->
-            // Noop
-        }
-
-        val chain1 = filter1.then(filter2)
-        val chain2 = filter1.then(filter3)
-
-        assertThat(chain1).isNotEqualTo(chain2)
-    }
-}
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldBufferTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldBufferTest.kt
index f6f09cc..665e76f 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldBufferTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldBufferTest.kt
@@ -427,6 +427,46 @@
         assertThat(buffer.changes.changeCount).isEqualTo(1)
     }
 
+    @Test
+    fun charAt_throws_whenEmpty() {
+        val buffer = TextFieldBuffer(TextFieldCharSequence())
+
+        assertFailsWith<IndexOutOfBoundsException> {
+            buffer.charAt(0)
+        }
+    }
+
+    @Test
+    fun charAt_throws_whenOutOfBounds() {
+        val buffer = TextFieldBuffer(TextFieldCharSequence("a"))
+
+        assertFailsWith<IndexOutOfBoundsException> {
+            buffer.charAt(1)
+        }
+        assertFailsWith<IndexOutOfBoundsException> {
+            buffer.charAt(-1)
+        }
+    }
+
+    @Test
+    fun charAt_returnsChars() {
+        val buffer = TextFieldBuffer(TextFieldCharSequence("ab"))
+        assertThat(buffer.charAt(0)).isEqualTo('a')
+        assertThat(buffer.charAt(1)).isEqualTo('b')
+    }
+
+    @Test
+    fun asCharSequence_isViewOfBuffer() {
+        val buffer = TextFieldBuffer(TextFieldCharSequence())
+        val charSequence = buffer.asCharSequence()
+
+        assertThat(charSequence.toString()).isEmpty()
+
+        buffer.append("hello")
+
+        assertThat(charSequence.toString()).isEqualTo("hello")
+    }
+
     /** Tests of private testing helper code. */
     @Test
     fun testConvertTextFieldValueToAndFromString() {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/CommitTextCommandTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/CommitTextCommandTest.kt
index 543a242..50b5115 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/CommitTextCommandTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/CommitTextCommandTest.kt
@@ -29,7 +29,7 @@
     fun test_insert_empty() {
         val eb = EditingBuffer("", TextRange.Zero)
 
-        eb.update(CommitTextCommand("X", 1))
+        eb.commitText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("X")
         assertThat(eb.cursor).isEqualTo(1)
@@ -40,7 +40,7 @@
     fun test_insert_cursor_tail() {
         val eb = EditingBuffer("A", TextRange(1))
 
-        eb.update(CommitTextCommand("X", 1))
+        eb.commitText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("AX")
         assertThat(eb.cursor).isEqualTo(2)
@@ -51,7 +51,7 @@
     fun test_insert_cursor_head() {
         val eb = EditingBuffer("A", TextRange(1))
 
-        eb.update(CommitTextCommand("X", 0))
+        eb.commitText("X", 0)
 
         assertThat(eb.toString()).isEqualTo("AX")
         assertThat(eb.cursor).isEqualTo(1)
@@ -62,7 +62,7 @@
     fun test_insert_cursor_far_tail() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(CommitTextCommand("X", 2))
+        eb.commitText("X", 2)
 
         assertThat(eb.toString()).isEqualTo("AXBCDE")
         assertThat(eb.cursor).isEqualTo(3)
@@ -73,7 +73,7 @@
     fun test_insert_cursor_far_head() {
         val eb = EditingBuffer("ABCDE", TextRange(4))
 
-        eb.update(CommitTextCommand("X", -2))
+        eb.commitText("X", -2)
 
         assertThat(eb.toString()).isEqualTo("ABCDXE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -84,7 +84,7 @@
     fun test_insert_empty_text_cursor_head() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(CommitTextCommand("", 0))
+        eb.commitText("", 0)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -95,7 +95,7 @@
     fun test_insert_empty_text_cursor_tail() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(CommitTextCommand("", 1))
+        eb.commitText("", 1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -106,7 +106,7 @@
     fun test_insert_empty_text_cursor_far_tail() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(CommitTextCommand("", 2))
+        eb.commitText("", 2)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -117,7 +117,7 @@
     fun test_insert_empty_text_cursor_far_head() {
         val eb = EditingBuffer("ABCDE", TextRange(4))
 
-        eb.update(CommitTextCommand("", -2))
+        eb.commitText("", -2)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -129,7 +129,7 @@
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
         eb.setComposition(1, 4) // Mark "BCD" as composition
-        eb.update(CommitTextCommand("X", 1))
+        eb.commitText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("AXE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -140,7 +140,7 @@
     fun test_replace_selection() {
         val eb = EditingBuffer("ABCDE", TextRange(1, 4)) // select "BCD"
 
-        eb.update(CommitTextCommand("X", 1))
+        eb.commitText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("AXE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -152,7 +152,7 @@
         val eb = EditingBuffer("ABCDE", TextRange(1, 3)) // select "BC"
 
         eb.setComposition(2, 4) // Mark "CD" as composition
-        eb.update(CommitTextCommand("X", 1))
+        eb.commitText("X", 1)
 
         // If composition and selection exists at the same time, replace composition and cancel
         // selection and place cursor.
@@ -165,7 +165,7 @@
     fun test_cursor_position_too_small() {
         val eb = EditingBuffer("ABCDE", TextRange(5))
 
-        eb.update(CommitTextCommand("X", -1000))
+        eb.commitText("X", -1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDEX")
         assertThat(eb.cursor).isEqualTo(0)
@@ -176,7 +176,7 @@
     fun test_cursor_position_too_large() {
         val eb = EditingBuffer("ABCDE", TextRange(5))
 
-        eb.update(CommitTextCommand("X", 1000))
+        eb.commitText("X", 1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDEX")
         assertThat(eb.cursor).isEqualTo(6)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextCommandTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextCommandTest.kt
index cb26cf1..dfe37fc 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextCommandTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextCommandTest.kt
@@ -30,7 +30,7 @@
     fun test_delete_after() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(DeleteSurroundingTextCommand(0, 1))
+        eb.deleteSurroundingText(0, 1)
 
         assertThat(eb.toString()).isEqualTo("ACDE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -41,7 +41,7 @@
     fun test_delete_before() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(DeleteSurroundingTextCommand(1, 0))
+        eb.deleteSurroundingText(1, 0)
 
         assertThat(eb.toString()).isEqualTo("BCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -52,7 +52,7 @@
     fun test_delete_both() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -63,7 +63,7 @@
     fun test_delete_after_multiple() {
         val eb = EditingBuffer("ABCDE", TextRange(2))
 
-        eb.update(DeleteSurroundingTextCommand(0, 2))
+        eb.deleteSurroundingText(0, 2)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -74,7 +74,7 @@
     fun test_delete_before_multiple() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(DeleteSurroundingTextCommand(2, 0))
+        eb.deleteSurroundingText(2, 0)
 
         assertThat(eb.toString()).isEqualTo("ADE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -85,7 +85,7 @@
     fun test_delete_both_multiple() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(DeleteSurroundingTextCommand(2, 2))
+        eb.deleteSurroundingText(2, 2)
 
         assertThat(eb.toString()).isEqualTo("A")
         assertThat(eb.cursor).isEqualTo(1)
@@ -96,7 +96,7 @@
     fun test_delete_selection_preserve() {
         val eb = EditingBuffer("ABCDE", TextRange(2, 4))
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ACD")
         assertThat(eb.selectionStart).isEqualTo(1)
@@ -108,7 +108,7 @@
     fun test_delete_before_too_many() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(DeleteSurroundingTextCommand(1000, 0))
+        eb.deleteSurroundingText(1000, 0)
 
         assertThat(eb.toString()).isEqualTo("DE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -119,7 +119,7 @@
     fun test_delete_after_too_many() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(DeleteSurroundingTextCommand(0, 1000))
+        eb.deleteSurroundingText(0, 1000)
 
         assertThat(eb.toString()).isEqualTo("ABC")
         assertThat(eb.cursor).isEqualTo(3)
@@ -130,7 +130,7 @@
     fun test_delete_both_too_many() {
         val eb = EditingBuffer("ABCDE", TextRange(3))
 
-        eb.update(DeleteSurroundingTextCommand(1000, 1000))
+        eb.deleteSurroundingText(1000, 1000)
 
         assertThat(eb.toString()).isEqualTo("")
         assertThat(eb.cursor).isEqualTo(0)
@@ -143,7 +143,7 @@
 
         eb.setComposition(0, 1)
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -157,7 +157,7 @@
 
         eb.setComposition(4, 5)
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -171,7 +171,7 @@
 
         eb.setComposition(0, 3)
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -185,7 +185,7 @@
 
         eb.setComposition(3, 5)
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -199,7 +199,7 @@
 
         eb.setComposition(2, 3)
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -212,7 +212,7 @@
 
         eb.setComposition(0, 5)
 
-        eb.update(DeleteSurroundingTextCommand(1, 1))
+        eb.deleteSurroundingText(1, 1)
 
         assertThat(eb.toString()).isEqualTo("ABE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -222,16 +222,18 @@
 
     @Test
     fun throws_whenLengthBeforeInvalid() {
+        val eb = EditingBuffer("", TextRange(0))
         val error = assertFailsWith<IllegalArgumentException> {
-            DeleteSurroundingTextCommand(lengthBeforeCursor = -42, lengthAfterCursor = 0)
+            eb.deleteSurroundingText(lengthBeforeCursor = -42, lengthAfterCursor = 0)
         }
         assertThat(error).hasMessageThat().contains("-42")
     }
 
     @Test
     fun throws_whenLengthAfterInvalid() {
+        val eb = EditingBuffer("", TextRange(0))
         val error = assertFailsWith<IllegalArgumentException> {
-            DeleteSurroundingTextCommand(lengthBeforeCursor = 0, lengthAfterCursor = -42)
+            eb.deleteSurroundingText(lengthBeforeCursor = 0, lengthAfterCursor = -42)
         }
         assertThat(error).hasMessageThat().contains("-42")
     }
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextInCodePointsCommandTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextInCodePointsCommandTest.kt
index a8fbb15..83ea8eb 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextInCodePointsCommandTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/DeleteSurroundingTextInCodePointsCommandTest.kt
@@ -35,7 +35,7 @@
     fun test_delete_after() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(2))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(0, 1))
+        eb.deleteSurroundingTextInCodePoints(0, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH3$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(2)
@@ -46,7 +46,7 @@
     fun test_delete_before() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(2))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 0))
+        eb.deleteSurroundingTextInCodePoints(1, 0)
 
         assertThat(eb.toString()).isEqualTo("$CH2$CH3$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(0)
@@ -57,7 +57,7 @@
     fun test_delete_both() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -68,7 +68,7 @@
     fun test_delete_after_multiple() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(4))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(0, 2))
+        eb.deleteSurroundingTextInCodePoints(0, 2)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -79,7 +79,7 @@
     fun test_delete_before_multiple() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(2, 0))
+        eb.deleteSurroundingTextInCodePoints(2, 0)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(2)
@@ -90,7 +90,7 @@
     fun test_delete_both_multiple() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(2, 2))
+        eb.deleteSurroundingTextInCodePoints(2, 2)
 
         assertThat(eb.toString()).isEqualTo(CH1)
         assertThat(eb.cursor).isEqualTo(2)
@@ -101,7 +101,7 @@
     fun test_delete_selection_preserve() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(4, 8))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH3$CH4")
         assertThat(eb.selectionStart).isEqualTo(2)
@@ -113,7 +113,7 @@
     fun test_delete_before_too_many() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1000, 0))
+        eb.deleteSurroundingTextInCodePoints(1000, 0)
 
         assertThat(eb.toString()).isEqualTo("$CH4$CH5")
         assertThat(eb.cursor).isEqualTo(0)
@@ -124,7 +124,7 @@
     fun test_delete_after_too_many() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(0, 1000))
+        eb.deleteSurroundingTextInCodePoints(0, 1000)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH3")
         assertThat(eb.cursor).isEqualTo(6)
@@ -135,7 +135,7 @@
     fun test_delete_both_too_many() {
         val eb = EditingBuffer("$CH1$CH2$CH3$CH4$CH5", TextRange(6))
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1000, 1000))
+        eb.deleteSurroundingTextInCodePoints(1000, 1000)
 
         assertThat(eb.toString()).isEqualTo("")
         assertThat(eb.cursor).isEqualTo(0)
@@ -148,7 +148,7 @@
 
         eb.setComposition(0, 2)
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -162,7 +162,7 @@
 
         eb.setComposition(8, 10)
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -176,7 +176,7 @@
 
         eb.setComposition(0, 6)
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -190,7 +190,7 @@
 
         eb.setComposition(6, 10)
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -204,7 +204,7 @@
 
         eb.setComposition(4, 6)
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -217,7 +217,7 @@
 
         eb.setComposition(0, 10)
 
-        eb.update(DeleteSurroundingTextInCodePointsCommand(1, 1))
+        eb.deleteSurroundingTextInCodePoints(1, 1)
 
         assertThat(eb.toString()).isEqualTo("$CH1$CH2$CH5")
         assertThat(eb.cursor).isEqualTo(4)
@@ -227,22 +227,18 @@
 
     @Test
     fun throws_whenLengthBeforeInvalid() {
+        val eb = EditingBuffer("", TextRange(0))
         val error = assertFailsWith<IllegalArgumentException> {
-            DeleteSurroundingTextInCodePointsCommand(
-                lengthBeforeCursor = -42,
-                lengthAfterCursor = 0
-            )
+            eb.deleteSurroundingTextInCodePoints(lengthBeforeCursor = 0, lengthAfterCursor = -42)
         }
         assertThat(error).hasMessageThat().contains("-42")
     }
 
     @Test
     fun throws_whenLengthAfterInvalid() {
+        val eb = EditingBuffer("", TextRange(0))
         val error = assertFailsWith<IllegalArgumentException> {
-            DeleteSurroundingTextInCodePointsCommand(
-                lengthBeforeCursor = 0,
-                lengthAfterCursor = -42
-            )
+            eb.deleteSurroundingTextInCodePoints(lengthBeforeCursor = -42, lengthAfterCursor = 0)
         }
         assertThat(error).hasMessageThat().contains("-42")
     }
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/EditProcessorTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/EditProcessorTest.kt
deleted file mode 100644
index 7a5eba6..0000000
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/EditProcessorTest.kt
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text2.input.internal
-
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.text2.input.TextEditFilter
-import androidx.compose.foundation.text2.input.TextFieldCharSequence
-import androidx.compose.ui.text.TextRange
-import com.google.common.truth.Truth.assertThat
-import kotlin.test.fail
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@OptIn(ExperimentalFoundationApi::class)
-@RunWith(JUnit4::class)
-class EditProcessorTest {
-
-    @Test
-    fun initializeValue() {
-        val firstValue = TextFieldCharSequence("ABCDE", TextRange.Zero)
-        val processor = EditProcessor(firstValue)
-
-        assertThat(processor.value).isEqualTo(firstValue)
-    }
-
-    @Test
-    fun apply_commitTextCommand_changesValue() {
-        val firstValue = TextFieldCharSequence("ABCDE", TextRange.Zero)
-        val processor = EditProcessor(firstValue)
-
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        processor.update(CommitTextCommand("X", 1))
-        val newState = processor.value
-
-        assertThat(newState.toString()).isEqualTo("XABCDE")
-        assertThat(newState.selectionInChars.min).isEqualTo(1)
-        assertThat(newState.selectionInChars.max).isEqualTo(1)
-        // edit command updates should not trigger reset listeners.
-        assertThat(resetCalled).isEqualTo(0)
-    }
-
-    @Test
-    fun apply_setSelectionCommand_changesValue() {
-        val firstValue = TextFieldCharSequence("ABCDE", TextRange.Zero)
-        val processor = EditProcessor(firstValue)
-
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        processor.update(SetSelectionCommand(0, 2))
-        val newState = processor.value
-
-        assertThat(newState.toString()).isEqualTo("ABCDE")
-        assertThat(newState.selectionInChars.min).isEqualTo(0)
-        assertThat(newState.selectionInChars.max).isEqualTo(2)
-        // edit command updates should not trigger reset listeners.
-        assertThat(resetCalled).isEqualTo(0)
-    }
-
-    @Test
-    fun testNewState_bufferNotUpdated_ifSameModelStructurally() {
-        val processor = EditProcessor()
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        val initialBuffer = processor.mBuffer
-        processor.reset(TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero))
-        assertThat(processor.mBuffer).isNotSameInstanceAs(initialBuffer)
-
-        val updatedBuffer = processor.mBuffer
-        processor.reset(TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero))
-        assertThat(processor.mBuffer).isSameInstanceAs(updatedBuffer)
-
-        assertThat(resetCalled).isEqualTo(2)
-    }
-
-    @Test
-    fun testNewState_new_buffer_created_if_text_is_different() {
-        val processor = EditProcessor()
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        val textFieldValue = TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero)
-        processor.reset(textFieldValue)
-        val initialBuffer = processor.mBuffer
-
-        val newTextFieldValue = TextFieldCharSequence("abc")
-        processor.reset(newTextFieldValue)
-
-        assertThat(processor.mBuffer).isNotSameInstanceAs(initialBuffer)
-        assertThat(resetCalled).isEqualTo(2)
-    }
-
-    @Test
-    fun testNewState_buffer_not_recreated_if_selection_is_different() {
-        val processor = EditProcessor()
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        val textFieldValue = TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero)
-        processor.reset(textFieldValue)
-        val initialBuffer = processor.mBuffer
-
-        val newTextFieldValue = TextFieldCharSequence(textFieldValue, selection = TextRange(1))
-        processor.reset(newTextFieldValue)
-
-        assertThat(processor.mBuffer).isSameInstanceAs(initialBuffer)
-        assertThat(newTextFieldValue.selectionInChars.start)
-            .isEqualTo(processor.mBuffer.selectionStart)
-        assertThat(newTextFieldValue.selectionInChars.end).isEqualTo(processor.mBuffer.selectionEnd)
-        assertThat(resetCalled).isEqualTo(2)
-    }
-
-    @Test
-    fun testNewState_buffer_not_recreated_if_composition_is_different() {
-        val processor = EditProcessor()
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        val textFieldValue = TextFieldCharSequence("qwerty", TextRange.Zero, TextRange(1))
-        processor.reset(textFieldValue)
-        val initialBuffer = processor.mBuffer
-
-        // composition can not be set from app, IME owns it.
-        assertThat(EditingBuffer.NOWHERE).isEqualTo(initialBuffer.compositionStart)
-        assertThat(EditingBuffer.NOWHERE).isEqualTo(initialBuffer.compositionEnd)
-
-        val newTextFieldValue = TextFieldCharSequence(
-            textFieldValue,
-            textFieldValue.selectionInChars,
-            composition = null
-        )
-        processor.reset(newTextFieldValue)
-
-        assertThat(processor.mBuffer).isSameInstanceAs(initialBuffer)
-        assertThat(EditingBuffer.NOWHERE).isEqualTo(processor.mBuffer.compositionStart)
-        assertThat(EditingBuffer.NOWHERE).isEqualTo(processor.mBuffer.compositionEnd)
-        assertThat(resetCalled).isEqualTo(2)
-    }
-
-    @Test
-    fun testNewState_reversedSelection_setsTheSelection() {
-        val initialSelection = TextRange(2, 1)
-        val textFieldValue = TextFieldCharSequence("qwerty", initialSelection, TextRange(1))
-        val processor = EditProcessor(textFieldValue)
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        val initialBuffer = processor.mBuffer
-
-        assertThat(initialSelection.start).isEqualTo(initialBuffer.selectionStart)
-        assertThat(initialSelection.end).isEqualTo(initialBuffer.selectionEnd)
-
-        val updatedSelection = TextRange(3, 0)
-        val newTextFieldValue = TextFieldCharSequence(textFieldValue, selection = updatedSelection)
-        // set the new selection
-        processor.reset(newTextFieldValue)
-
-        assertThat(processor.mBuffer).isSameInstanceAs(initialBuffer)
-        assertThat(updatedSelection.start).isEqualTo(initialBuffer.selectionStart)
-        assertThat(updatedSelection.end).isEqualTo(initialBuffer.selectionEnd)
-        assertThat(resetCalled).isEqualTo(1)
-    }
-
-    @Test
-    fun compositionIsCleared_when_textChanged() {
-        val processor = EditProcessor()
-        var resetCalled = 0
-        processor.addResetListener { _, _ -> resetCalled++ }
-
-        // set the initial value
-        processor.update(
-            CommitTextCommand("ab", 0),
-            SetComposingRegionCommand(0, 2)
-        )
-
-        // change the text
-        val newValue =
-            TextFieldCharSequence(
-                "cd",
-                processor.value.selectionInChars,
-                processor.value.compositionInChars
-            )
-        processor.reset(newValue)
-
-        assertThat(processor.value.toString()).isEqualTo(newValue.toString())
-        assertThat(processor.value.compositionInChars).isNull()
-    }
-
-    @Test
-    fun compositionIsNotCleared_when_textIsSame() {
-        val processor = EditProcessor()
-        val composition = TextRange(0, 2)
-
-        // set the initial value
-        processor.update(
-            CommitTextCommand("ab", 0),
-            SetComposingRegionCommand(composition.start, composition.end)
-        )
-
-        // use the same TextFieldValue
-        val newValue =
-            TextFieldCharSequence(
-                processor.value,
-                processor.value.selectionInChars,
-                processor.value.compositionInChars
-            )
-        processor.reset(newValue)
-
-        assertThat(processor.value.toString()).isEqualTo(newValue.toString())
-        assertThat(processor.value.compositionInChars).isEqualTo(composition)
-    }
-
-    @Test
-    fun compositionIsCleared_when_compositionReset() {
-        val processor = EditProcessor()
-
-        // set the initial value
-        processor.update(
-            CommitTextCommand("ab", 0),
-            SetComposingRegionCommand(-1, -1)
-        )
-
-        // change the composition
-        val newValue =
-            TextFieldCharSequence(
-                processor.value,
-                processor.value.selectionInChars,
-                composition = TextRange(0, 2)
-            )
-        processor.reset(newValue)
-
-        assertThat(processor.value.toString()).isEqualTo(newValue.toString())
-        assertThat(processor.value.compositionInChars).isNull()
-    }
-
-    @Test
-    fun compositionIsCleared_when_compositionChanged() {
-        val processor = EditProcessor()
-
-        // set the initial value
-        processor.update(
-            CommitTextCommand("ab", 0),
-            SetComposingRegionCommand(0, 2)
-        )
-
-        // change the composition
-        val newValue = TextFieldCharSequence(
-            processor.value,
-            processor.value.selectionInChars,
-            composition = TextRange(0, 1)
-        )
-        processor.reset(newValue)
-
-        assertThat(processor.value.toString()).isEqualTo(newValue.toString())
-        assertThat(processor.value.compositionInChars).isNull()
-    }
-
-    @Test
-    fun compositionIsNotCleared_when_onlySelectionChanged() {
-        val processor = EditProcessor()
-
-        val composition = TextRange(0, 2)
-        val selection = TextRange(0, 2)
-
-        // set the initial value
-        processor.update(
-            CommitTextCommand("ab", 0),
-            SetComposingRegionCommand(composition.start, composition.end),
-            SetSelectionCommand(selection.start, selection.end)
-        )
-
-        // change selection
-        val newSelection = TextRange(1)
-        val newValue = TextFieldCharSequence(
-            processor.value,
-            selection = newSelection,
-            composition = processor.value.compositionInChars
-        )
-        processor.reset(newValue)
-
-        assertThat(processor.value.toString()).isEqualTo(newValue.toString())
-        assertThat(processor.value.compositionInChars).isEqualTo(composition)
-        assertThat(processor.value.selectionInChars).isEqualTo(newSelection)
-    }
-
-    @Test
-    fun filterThatDoesNothing_doesNotResetBuffer() {
-        val processor = EditProcessor(
-            TextFieldCharSequence(
-                "abc",
-                selection = TextRange(3),
-                composition = TextRange(0, 3)
-            )
-        )
-
-        val initialBuffer = processor.mBuffer
-
-        processor.update(CommitTextCommand("d", 4)) { _, _ -> }
-
-        val value = processor.value
-
-        assertThat(value.toString()).isEqualTo("abcd")
-        assertThat(processor.mBuffer).isSameInstanceAs(initialBuffer)
-    }
-
-    @Test
-    fun returningTheEquivalentValueFromFilter_doesNotResetBuffer() {
-        val processor = EditProcessor(
-            TextFieldCharSequence(
-                "abc",
-                selection = TextRange(3),
-                composition = TextRange(0, 3)
-            )
-        )
-
-        val initialBuffer = processor.mBuffer
-
-        processor.update(CommitTextCommand("d", 4)) { _, _ -> /* Noop */ }
-
-        val value = processor.value
-
-        assertThat(value.toString()).isEqualTo("abcd")
-        assertThat(processor.mBuffer).isSameInstanceAs(initialBuffer)
-    }
-
-    @Test
-    fun returningOldValueFromFilter_resetsTheBuffer() {
-        val processor = EditProcessor(
-            TextFieldCharSequence(
-                "abc",
-                selection = TextRange(3),
-                composition = TextRange(0, 3)
-            )
-        )
-
-        var resetCalledOld: TextFieldCharSequence? = null
-        var resetCalledNew: TextFieldCharSequence? = null
-        processor.addResetListener { old, new ->
-            resetCalledOld = old
-            resetCalledNew = new
-        }
-
-        val initialBuffer = processor.mBuffer
-
-        processor.update(CommitTextCommand("d", 4)) { _, new -> new.revertAllChanges() }
-
-        val value = processor.value
-
-        assertThat(value.toString()).isEqualTo("abc")
-        assertThat(processor.mBuffer).isNotSameInstanceAs(initialBuffer)
-        assertThat(resetCalledOld?.toString()).isEqualTo("abcd") // what IME applied
-        assertThat(resetCalledNew?.toString()).isEqualTo("abc") // what is decided by filter
-    }
-
-    @Test
-    fun filterNotRan_whenNoCommands() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
-        val processor = EditProcessor(initialValue)
-        val filter = TextEditFilter { old, new ->
-            fail("filter ran, old=\"$old\", new=\"$new\"")
-        }
-
-        processor.update(emptyList(), filter = filter)
-    }
-
-    @Test
-    fun filterNotRan_whenOnlyFinishComposingTextCommand_noComposition() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
-        val processor = EditProcessor(initialValue)
-        val filter = TextEditFilter { old, new ->
-            fail("filter ran, old=\"$old\", new=\"$new\"")
-        }
-
-        processor.update(FinishComposingTextCommand, filter = filter)
-    }
-
-    @Test
-    fun filterNotRan_whenOnlyFinishComposingTextCommand_withComposition() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(2), composition = TextRange(0, 5))
-        val processor = EditProcessor(initialValue)
-        val filter = TextEditFilter { old, new ->
-            fail("filter ran, old=\"$old\", new=\"$new\"")
-        }
-
-        processor.update(FinishComposingTextCommand, filter = filter)
-    }
-
-    @Test
-    fun filterNotRan_whenCommandsResultInInitialValue() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(2), composition = TextRange(0, 5))
-        val processor = EditProcessor(initialValue)
-        val filter = TextEditFilter { old, new ->
-            fail(
-                "filter ran, old=\"$old\" (${old.selectionInChars}), " +
-                    "new=\"$new\" (${new.selectionInChars})"
-            )
-        }
-
-        processor.update(
-            SetComposingRegionCommand(0, 5),
-            CommitTextCommand("hello", 1),
-            SetSelectionCommand(2, 2),
-            filter = filter
-        )
-    }
-
-    @Test
-    fun filterRan_whenOnlySelectionChanges() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
-        var filterRan = false
-        val processor = EditProcessor(initialValue)
-        val filter = TextEditFilter { old, new ->
-            // Filter should only run once.
-            assertThat(filterRan).isFalse()
-            filterRan = true
-            assertThat(new.toString()).isEqualTo(old.toString())
-            assertThat(old.selectionInChars).isEqualTo(TextRange(2))
-            assertThat(new.selectionInChars).isEqualTo(TextRange(0, 5))
-        }
-
-        processor.update(SetSelectionCommand(0, 5), filter = filter)
-    }
-
-    @Test
-    fun filterRan_whenOnlyTextChanges() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
-        var filterRan = false
-        val processor = EditProcessor(initialValue)
-        val filter = TextEditFilter { old, new ->
-            // Filter should only run once.
-            assertThat(filterRan).isFalse()
-            filterRan = true
-            assertThat(new.selectionInChars).isEqualTo(old.selectionInChars)
-            assertThat(old.toString()).isEqualTo("hello")
-            assertThat(new.toString()).isEqualTo("world")
-        }
-
-        processor.update(
-            DeleteAllCommand,
-            CommitTextCommand("world", 1),
-            SetSelectionCommand(2, 2),
-            filter = filter
-        )
-    }
-
-    @Test
-    fun stateUpdated_whenOnlyCompositionChanges_noFilter() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(5), composition = TextRange(0, 5))
-        val processor = EditProcessor(initialValue)
-
-        processor.update(SetComposingRegionCommand(2, 3), filter = null)
-
-        assertThat(processor.value.compositionInChars).isEqualTo(TextRange(2, 3))
-    }
-
-    @Test
-    fun stateUpdated_whenOnlyCompositionChanges_withFilter() {
-        val initialValue =
-            TextFieldCharSequence("hello", selection = TextRange(5), composition = TextRange(0, 5))
-        val processor = EditProcessor(initialValue)
-
-        processor.update(SetComposingRegionCommand(2, 3), filter = { _, _ -> })
-
-        assertThat(processor.value.compositionInChars).isEqualTo(TextRange(2, 3))
-    }
-
-    private fun EditProcessor.update(
-        vararg editCommand: EditCommand,
-        filter: TextEditFilter? = null
-    ) {
-        update(editCommand.toList(), filter)
-    }
-}
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/EditingBufferTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/EditingBufferTest.kt
index 2a17df51..99de440 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/EditingBufferTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/EditingBufferTest.kt
@@ -19,7 +19,6 @@
 import androidx.compose.foundation.text2.input.internal.matchers.assertThat
 import androidx.compose.ui.text.TextRange
 import com.google.common.truth.Truth.assertThat
-import kotlin.test.assertFailsWith
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -137,20 +136,22 @@
         assertThat(eb.compositionEnd).isEqualTo(-1)
     }
 
-    @Test fun setSelection_throws_whenNegativeStart() {
+    @Test fun setSelection_coerces_whenNegativeStart() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        assertFailsWith<IndexOutOfBoundsException> {
-            eb.setSelection(-1, 0)
-        }
+        eb.setSelection(-1, 1)
+
+        assertThat(eb.selectionStart).isEqualTo(0)
+        assertThat(eb.selectionEnd).isEqualTo(1)
     }
 
-    @Test fun setSelection_throws_whenNegativeEnd() {
+    @Test fun setSelection_coerces_whenNegativeEnd() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        assertFailsWith<IndexOutOfBoundsException> {
-            eb.setSelection(0, -1)
-        }
+        eb.setSelection(1, -1)
+
+        assertThat(eb.selectionStart).isEqualTo(1)
+        assertThat(eb.selectionEnd).isEqualTo(0)
     }
 
     @Test
@@ -191,15 +192,6 @@
         assertThat(eb.hasComposition()).isTrue()
         assertThat(eb.compositionStart).isEqualTo(2)
         assertThat(eb.compositionEnd).isEqualTo(4)
-
-        eb.cancelComposition() // cancel the composition
-        assertThat(eb).hasChars("ABE")
-        assertThat(eb.cursor).isEqualTo(2)
-        assertThat(eb.selectionStart).isEqualTo(2)
-        assertThat(eb.selectionEnd).isEqualTo(2)
-        assertThat(eb.hasComposition()).isFalse()
-        assertThat(eb.compositionStart).isEqualTo(-1)
-        assertThat(eb.compositionEnd).isEqualTo(-1)
     }
 
     @Test
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/FinishComposingTextCommandTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/FinishComposingTextCommandTest.kt
index 67f4bf3..ed69eea1 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/FinishComposingTextCommandTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/FinishComposingTextCommandTest.kt
@@ -30,7 +30,7 @@
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
         eb.setComposition(1, 4)
-        eb.update(FinishComposingTextCommand)
+        eb.finishComposingText()
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -42,7 +42,7 @@
         val eb = EditingBuffer("ABCDE", TextRange(1, 4))
 
         eb.setComposition(2, 5)
-        eb.update(FinishComposingTextCommand)
+        eb.finishComposingText()
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.selectionStart).isEqualTo(1)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingRegionCommandTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingRegionCommandTest.kt
index 79eaca0..14409ea 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingRegionCommandTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingRegionCommandTest.kt
@@ -29,7 +29,7 @@
     fun test_set() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetComposingRegionCommand(1, 4))
+        eb.setComposingRegion(1, 4)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -44,7 +44,7 @@
 
         eb.setComposition(1, 3)
 
-        eb.update(SetComposingRegionCommand(2, 4))
+        eb.setComposingRegion(2, 4)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -57,7 +57,7 @@
     fun test_preserve_selection() {
         val eb = EditingBuffer("ABCDE", TextRange(1, 4))
 
-        eb.update(SetComposingRegionCommand(2, 4))
+        eb.setComposingRegion(2, 4)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.selectionStart).isEqualTo(1)
@@ -71,7 +71,7 @@
     fun test_set_reversed() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetComposingRegionCommand(4, 1))
+        eb.setComposingRegion(4, 1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -84,7 +84,7 @@
     fun test_set_too_small() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetComposingRegionCommand(-1000, -1000))
+        eb.setComposingRegion(-1000, -1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -95,7 +95,7 @@
     fun test_set_too_large() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetComposingRegionCommand(1000, 1000))
+        eb.setComposingRegion(1000, 1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -106,7 +106,7 @@
     fun test_set_too_small_and_too_large() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetComposingRegionCommand(-1000, 1000))
+        eb.setComposingRegion(-1000, 1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -119,7 +119,7 @@
     fun test_set_too_small_and_too_large_reversed() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetComposingRegionCommand(1000, -1000))
+        eb.setComposingRegion(1000, -1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingTextCommandTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingTextCommandTest.kt
index a684ff3..a517276c 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingTextCommandTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetComposingTextCommandTest.kt
@@ -29,7 +29,7 @@
     fun test_insert_empty() {
         val eb = EditingBuffer("", TextRange.Zero)
 
-        eb.update(SetComposingTextCommand("X", 1))
+        eb.setComposingText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("X")
         assertThat(eb.cursor).isEqualTo(1)
@@ -42,7 +42,7 @@
     fun test_insert_cursor_tail() {
         val eb = EditingBuffer("A", TextRange(1))
 
-        eb.update(SetComposingTextCommand("X", 1))
+        eb.setComposingText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("AX")
         assertThat(eb.cursor).isEqualTo(2)
@@ -55,7 +55,7 @@
     fun test_insert_cursor_head() {
         val eb = EditingBuffer("A", TextRange(1))
 
-        eb.update(SetComposingTextCommand("X", 0))
+        eb.setComposingText("X", 0)
 
         assertThat(eb.toString()).isEqualTo("AX")
         assertThat(eb.cursor).isEqualTo(1)
@@ -68,7 +68,7 @@
     fun test_insert_cursor_far_tail() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(SetComposingTextCommand("X", 2))
+        eb.setComposingText("X", 2)
 
         assertThat(eb.toString()).isEqualTo("AXBCDE")
         assertThat(eb.cursor).isEqualTo(3)
@@ -81,7 +81,7 @@
     fun test_insert_cursor_far_head() {
         val eb = EditingBuffer("ABCDE", TextRange(4))
 
-        eb.update(SetComposingTextCommand("X", -2))
+        eb.setComposingText("X", -2)
 
         assertThat(eb.toString()).isEqualTo("ABCDXE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -94,7 +94,7 @@
     fun test_insert_empty_text_cursor_head() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(SetComposingTextCommand("", 0))
+        eb.setComposingText("", 0)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -105,7 +105,7 @@
     fun test_insert_empty_text_cursor_tail() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(SetComposingTextCommand("", 1))
+        eb.setComposingText("", 1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(1)
@@ -116,7 +116,7 @@
     fun test_insert_empty_text_cursor_far_tail() {
         val eb = EditingBuffer("ABCDE", TextRange(1))
 
-        eb.update(SetComposingTextCommand("", 2))
+        eb.setComposingText("", 2)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -127,7 +127,7 @@
     fun test_insert_empty_text_cursor_far_head() {
         val eb = EditingBuffer("ABCDE", TextRange(4))
 
-        eb.update(SetComposingTextCommand("", -2))
+        eb.setComposingText("", -2)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -139,7 +139,7 @@
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
         eb.setComposition(1, 4) // Mark "BCD" as composition
-        eb.update(SetComposingTextCommand("X", 1))
+        eb.setComposingText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("AXE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -152,7 +152,7 @@
     fun test_replace_selection() {
         val eb = EditingBuffer("ABCDE", TextRange(1, 4)) // select "BCD"
 
-        eb.update(SetComposingTextCommand("X", 1))
+        eb.setComposingText("X", 1)
 
         assertThat(eb.toString()).isEqualTo("AXE")
         assertThat(eb.cursor).isEqualTo(2)
@@ -166,7 +166,7 @@
         val eb = EditingBuffer("ABCDE", TextRange(1, 3)) // select "BC"
 
         eb.setComposition(2, 4) // Mark "CD" as composition
-        eb.update(SetComposingTextCommand("X", 1))
+        eb.setComposingText("X", 1)
 
         // If composition and selection exists at the same time, replace composition and cancel
         // selection and place cursor.
@@ -181,7 +181,7 @@
     fun test_cursor_position_too_small() {
         val eb = EditingBuffer("ABCDE", TextRange(5))
 
-        eb.update(SetComposingTextCommand("X", -1000))
+        eb.setComposingText("X", -1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDEX")
         assertThat(eb.cursor).isEqualTo(0)
@@ -194,7 +194,7 @@
     fun test_cursor_position_too_large() {
         val eb = EditingBuffer("ABCDE", TextRange(5))
 
-        eb.update(SetComposingTextCommand("X", 1000))
+        eb.setComposingText("X", 1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDEX")
         assertThat(eb.cursor).isEqualTo(6)
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetSelectionCommandTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetSelectionCommandTest.kt
index 6a97ac4..1070d9b 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetSelectionCommandTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/SetSelectionCommandTest.kt
@@ -29,7 +29,7 @@
     fun test_set() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetSelectionCommand(1, 4))
+        eb.setSelection(1, 4)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.selectionStart).isEqualTo(1)
@@ -43,7 +43,7 @@
 
         eb.setComposition(1, 3)
 
-        eb.update(SetSelectionCommand(2, 4))
+        eb.setSelection(2, 4)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.selectionStart).isEqualTo(2)
@@ -57,7 +57,7 @@
     fun test_cancel_ongoing_selection() {
         val eb = EditingBuffer("ABCDE", TextRange(1, 4))
 
-        eb.update(SetSelectionCommand(2, 5))
+        eb.setSelection(2, 5)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.selectionStart).isEqualTo(2)
@@ -69,11 +69,11 @@
     fun test_set_reversed() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetSelectionCommand(4, 1))
+        eb.setSelection(4, 1)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
-        assertThat(eb.selectionStart).isEqualTo(1)
-        assertThat(eb.selectionEnd).isEqualTo(4)
+        assertThat(eb.selectionStart).isEqualTo(4)
+        assertThat(eb.selectionEnd).isEqualTo(1)
         assertThat(eb.hasComposition()).isFalse()
     }
 
@@ -81,7 +81,7 @@
     fun test_set_too_small() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetSelectionCommand(-1000, -1000))
+        eb.setSelection(-1000, -1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(0)
@@ -92,7 +92,7 @@
     fun test_set_too_large() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetSelectionCommand(1000, 1000))
+        eb.setSelection(1000, 1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.cursor).isEqualTo(5)
@@ -103,7 +103,7 @@
     fun test_set_too_small_too_large() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetSelectionCommand(-1000, 1000))
+        eb.setSelection(-1000, 1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
         assertThat(eb.selectionStart).isEqualTo(0)
@@ -115,11 +115,11 @@
     fun test_set_too_small_too_large_reversed() {
         val eb = EditingBuffer("ABCDE", TextRange.Zero)
 
-        eb.update(SetSelectionCommand(1000, -1000))
+        eb.setSelection(1000, -1000)
 
         assertThat(eb.toString()).isEqualTo("ABCDE")
-        assertThat(eb.selectionStart).isEqualTo(0)
-        assertThat(eb.selectionEnd).isEqualTo(5)
+        assertThat(eb.selectionStart).isEqualTo(5)
+        assertThat(eb.selectionEnd).isEqualTo(0)
         assertThat(eb.hasComposition()).isFalse()
     }
 }
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldStateInternalBufferTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldStateInternalBufferTest.kt
new file mode 100644
index 0000000..63242e6
--- /dev/null
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldStateInternalBufferTest.kt
@@ -0,0 +1,518 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.foundation.text2.input.internal
+
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.text2.input.InputTransformation
+import androidx.compose.foundation.text2.input.TextFieldCharSequence
+import androidx.compose.foundation.text2.input.TextFieldState
+import androidx.compose.ui.text.TextRange
+import com.google.common.truth.Truth.assertThat
+import kotlin.test.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@OptIn(ExperimentalFoundationApi::class)
+@RunWith(JUnit4::class)
+class TextFieldStateInternalBufferTest {
+
+    @Test
+    fun initializeValue() {
+        val firstValue = TextFieldCharSequence("ABCDE", TextRange.Zero)
+        val state = TextFieldState(firstValue)
+
+        assertThat(state.text).isEqualTo(firstValue)
+    }
+
+    @Test
+    fun apply_commitTextCommand_changesValue() {
+        val firstValue = TextFieldCharSequence("ABCDE", TextRange.Zero)
+        val state = TextFieldState(firstValue)
+
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        state.editAsUser { commitText("X", 1) }
+        val newState = state.text
+
+        assertThat(newState.toString()).isEqualTo("XABCDE")
+        assertThat(newState.selectionInChars.min).isEqualTo(1)
+        assertThat(newState.selectionInChars.max).isEqualTo(1)
+        // edit command updates should not trigger reset listeners.
+        assertThat(resetCalled).isEqualTo(0)
+    }
+
+    @Test
+    fun apply_setSelectionCommand_changesValue() {
+        val firstValue = TextFieldCharSequence("ABCDE", TextRange.Zero)
+        val state = TextFieldState(firstValue)
+
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        state.editAsUser { setSelection(0, 2) }
+        val newState = state.text
+
+        assertThat(newState.toString()).isEqualTo("ABCDE")
+        assertThat(newState.selectionInChars.min).isEqualTo(0)
+        assertThat(newState.selectionInChars.max).isEqualTo(2)
+        // edit command updates should not trigger reset listeners.
+        assertThat(resetCalled).isEqualTo(0)
+    }
+
+    @Test
+    fun testNewState_bufferNotUpdated_ifSameModelStructurally() {
+        val state = TextFieldState()
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        val initialBuffer = state.mainBuffer
+        state.resetStateAndNotifyIme(
+            TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero)
+        )
+        assertThat(state.mainBuffer).isNotSameInstanceAs(initialBuffer)
+
+        val updatedBuffer = state.mainBuffer
+        state.resetStateAndNotifyIme(
+            TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero)
+        )
+        assertThat(state.mainBuffer).isSameInstanceAs(updatedBuffer)
+
+        assertThat(resetCalled).isEqualTo(2)
+    }
+
+    @Test
+    fun testNewState_new_buffer_created_if_text_is_different() {
+        val state = TextFieldState()
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        val textFieldValue = TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero)
+        state.resetStateAndNotifyIme(textFieldValue)
+        val initialBuffer = state.mainBuffer
+
+        val newTextFieldValue = TextFieldCharSequence("abc")
+        state.resetStateAndNotifyIme(newTextFieldValue)
+
+        assertThat(state.mainBuffer).isNotSameInstanceAs(initialBuffer)
+        assertThat(resetCalled).isEqualTo(2)
+    }
+
+    @Test
+    fun testNewState_buffer_not_recreated_if_selection_is_different() {
+        val state = TextFieldState()
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        val textFieldValue = TextFieldCharSequence("qwerty", TextRange.Zero, TextRange.Zero)
+        state.resetStateAndNotifyIme(textFieldValue)
+        val initialBuffer = state.mainBuffer
+
+        val newTextFieldValue = TextFieldCharSequence(textFieldValue, selection = TextRange(1))
+        state.resetStateAndNotifyIme(newTextFieldValue)
+
+        assertThat(state.mainBuffer).isSameInstanceAs(initialBuffer)
+        assertThat(newTextFieldValue.selectionInChars.start)
+            .isEqualTo(state.mainBuffer.selectionStart)
+        assertThat(newTextFieldValue.selectionInChars.end).isEqualTo(
+            state.mainBuffer.selectionEnd
+        )
+        assertThat(resetCalled).isEqualTo(2)
+    }
+
+    @Test
+    fun testNewState_buffer_not_recreated_if_composition_is_different() {
+        val state = TextFieldState()
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        val textFieldValue = TextFieldCharSequence("qwerty", TextRange.Zero, TextRange(1))
+        state.resetStateAndNotifyIme(textFieldValue)
+        val initialBuffer = state.mainBuffer
+
+        // composition can not be set from app, IME owns it.
+        assertThat(EditingBuffer.NOWHERE).isEqualTo(initialBuffer.compositionStart)
+        assertThat(EditingBuffer.NOWHERE).isEqualTo(initialBuffer.compositionEnd)
+
+        val newTextFieldValue = TextFieldCharSequence(
+            textFieldValue,
+            textFieldValue.selectionInChars,
+            composition = null
+        )
+        state.resetStateAndNotifyIme(newTextFieldValue)
+
+        assertThat(state.mainBuffer).isSameInstanceAs(initialBuffer)
+        assertThat(EditingBuffer.NOWHERE).isEqualTo(state.mainBuffer.compositionStart)
+        assertThat(EditingBuffer.NOWHERE).isEqualTo(state.mainBuffer.compositionEnd)
+        assertThat(resetCalled).isEqualTo(2)
+    }
+
+    @Test
+    fun testNewState_reversedSelection_setsTheSelection() {
+        val initialSelection = TextRange(2, 1)
+        val textFieldValue = TextFieldCharSequence("qwerty", initialSelection, TextRange(1))
+        val state = TextFieldState(textFieldValue)
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        val initialBuffer = state.mainBuffer
+
+        assertThat(initialSelection.start).isEqualTo(initialBuffer.selectionStart)
+        assertThat(initialSelection.end).isEqualTo(initialBuffer.selectionEnd)
+
+        val updatedSelection = TextRange(3, 0)
+        val newTextFieldValue = TextFieldCharSequence(textFieldValue, selection = updatedSelection)
+        // set the new selection
+        state.resetStateAndNotifyIme(newTextFieldValue)
+
+        assertThat(state.mainBuffer).isSameInstanceAs(initialBuffer)
+        assertThat(updatedSelection.start).isEqualTo(initialBuffer.selectionStart)
+        assertThat(updatedSelection.end).isEqualTo(initialBuffer.selectionEnd)
+        assertThat(resetCalled).isEqualTo(1)
+    }
+
+    @Test
+    fun compositionIsCleared_when_textChanged() {
+        val state = TextFieldState()
+        var resetCalled = 0
+        state.addNotifyImeListener { _, _ -> resetCalled++ }
+
+        // set the initial value
+        state.editAsUser {
+            commitText("ab", 0)
+            setComposingRegion(0, 2)
+        }
+
+        // change the text
+        val newValue =
+            TextFieldCharSequence(
+                "cd",
+                state.text.selectionInChars,
+                state.text.compositionInChars
+            )
+        state.resetStateAndNotifyIme(newValue)
+
+        assertThat(state.text.toString()).isEqualTo(newValue.toString())
+        assertThat(state.text.compositionInChars).isNull()
+    }
+
+    @Test
+    fun compositionIsNotCleared_when_textIsSame() {
+        val state = TextFieldState()
+        val composition = TextRange(0, 2)
+
+        // set the initial value
+        state.editAsUser {
+            commitText("ab", 0)
+            setComposingRegion(composition.start, composition.end)
+        }
+
+        // use the same TextFieldValue
+        val newValue =
+            TextFieldCharSequence(
+                state.text,
+                state.text.selectionInChars,
+                state.text.compositionInChars
+            )
+        state.resetStateAndNotifyIme(newValue)
+
+        assertThat(state.text.toString()).isEqualTo(newValue.toString())
+        assertThat(state.text.compositionInChars).isEqualTo(composition)
+    }
+
+    @Test
+    fun compositionIsCleared_when_compositionReset() {
+        val state = TextFieldState()
+
+        // set the initial value
+        state.editAsUser {
+            commitText("ab", 0)
+            setComposingRegion(-1, -1)
+        }
+
+        // change the composition
+        val newValue =
+            TextFieldCharSequence(
+                state.text,
+                state.text.selectionInChars,
+                composition = TextRange(0, 2)
+            )
+        state.resetStateAndNotifyIme(newValue)
+
+        assertThat(state.text.toString()).isEqualTo(newValue.toString())
+        assertThat(state.text.compositionInChars).isNull()
+    }
+
+    @Test
+    fun compositionIsCleared_when_compositionChanged() {
+        val state = TextFieldState()
+
+        // set the initial value
+        state.editAsUser {
+            commitText("ab", 0)
+            setComposingRegion(0, 2)
+        }
+
+        // change the composition
+        val newValue = TextFieldCharSequence(
+            state.text,
+            state.text.selectionInChars,
+            composition = TextRange(0, 1)
+        )
+        state.resetStateAndNotifyIme(newValue)
+
+        assertThat(state.text.toString()).isEqualTo(newValue.toString())
+        assertThat(state.text.compositionInChars).isNull()
+    }
+
+    @Test
+    fun compositionIsNotCleared_when_onlySelectionChanged() {
+        val state = TextFieldState()
+
+        val composition = TextRange(0, 2)
+        val selection = TextRange(0, 2)
+
+        // set the initial value
+        state.editAsUser {
+            commitText("ab", 0)
+            setComposingRegion(composition.start, composition.end)
+            setSelection(selection.start, selection.end)
+        }
+
+        // change selection
+        val newSelection = TextRange(1)
+        val newValue = TextFieldCharSequence(
+            state.text,
+            selection = newSelection,
+            composition = state.text.compositionInChars
+        )
+        state.resetStateAndNotifyIme(newValue)
+
+        assertThat(state.text.toString()).isEqualTo(newValue.toString())
+        assertThat(state.text.compositionInChars).isEqualTo(composition)
+        assertThat(state.text.selectionInChars).isEqualTo(newSelection)
+    }
+
+    @Test
+    fun filterThatDoesNothing_doesNotResetBuffer() {
+        val state = TextFieldState(
+            TextFieldCharSequence(
+                "abc",
+                selection = TextRange(3),
+                composition = TextRange(0, 3)
+            )
+        )
+
+        val initialBuffer = state.mainBuffer
+
+        state.editAsUser { commitText("d", 4) }
+
+        val value = state.text
+
+        assertThat(value.toString()).isEqualTo("abcd")
+        assertThat(state.mainBuffer).isSameInstanceAs(initialBuffer)
+    }
+
+    @Test
+    fun returningTheEquivalentValueFromFilter_doesNotResetBuffer() {
+        val state = TextFieldState(
+            TextFieldCharSequence(
+                "abc",
+                selection = TextRange(3),
+                composition = TextRange(0, 3)
+            )
+        )
+
+        val initialBuffer = state.mainBuffer
+
+        state.editAsUser { commitText("d", 4) }
+
+        val value = state.text
+
+        assertThat(value.toString()).isEqualTo("abcd")
+        assertThat(state.mainBuffer).isSameInstanceAs(initialBuffer)
+    }
+
+    @Test
+    fun returningOldValueFromFilter_resetsTheBuffer() {
+        val state = TextFieldState(
+            TextFieldCharSequence(
+                "abc",
+                selection = TextRange(3),
+                composition = TextRange(0, 3)
+            )
+        )
+
+        var resetCalledOld: TextFieldCharSequence? = null
+        var resetCalledNew: TextFieldCharSequence? = null
+        state.addNotifyImeListener { old, new ->
+            resetCalledOld = old
+            resetCalledNew = new
+        }
+
+        val initialBuffer = state.mainBuffer
+
+        state.editAsUser(
+            inputTransformation = { _, new -> new.revertAllChanges() },
+            notifyImeOfChanges = false
+        ) {
+            commitText("d", 4)
+        }
+
+        val value = state.text
+
+        assertThat(value.toString()).isEqualTo("abc")
+        assertThat(state.mainBuffer).isNotSameInstanceAs(initialBuffer)
+        assertThat(resetCalledOld?.toString()).isEqualTo("abcd") // what IME applied
+        assertThat(resetCalledNew?.toString()).isEqualTo("abc") // what is decided by filter
+    }
+
+    @Test
+    fun filterNotRan_whenNoCommands() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
+        val state = TextFieldState(initialValue)
+        val inputTransformation = InputTransformation { old, new ->
+            fail("filter ran, old=\"$old\", new=\"$new\"")
+        }
+
+        state.editAsUser(inputTransformation, notifyImeOfChanges = false) {}
+    }
+
+    @Test
+    fun filterNotRan_whenOnlyFinishComposingTextCommand_noComposition() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
+        val state = TextFieldState(initialValue)
+        val inputTransformation = InputTransformation { old, new ->
+            fail("filter ran, old=\"$old\", new=\"$new\"")
+        }
+
+        state.editAsUser(
+            inputTransformation = inputTransformation,
+            notifyImeOfChanges = false
+        ) { finishComposingText() }
+    }
+
+    @Test
+    fun filterNotRan_whenOnlyFinishComposingTextCommand_withComposition() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(2), composition = TextRange(0, 5))
+        val state = TextFieldState(initialValue)
+        val inputTransformation = InputTransformation { old, new ->
+            fail("filter ran, old=\"$old\", new=\"$new\"")
+        }
+
+        state.editAsUser(
+            inputTransformation = inputTransformation,
+            notifyImeOfChanges = false
+        ) { finishComposingText() }
+    }
+
+    @Test
+    fun filterNotRan_whenCommandsResultInInitialValue() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(2), composition = TextRange(0, 5))
+        val state = TextFieldState(initialValue)
+        val inputTransformation = InputTransformation { old, new ->
+            fail(
+                "filter ran, old=\"$old\" (${old.selectionInChars}), " +
+                    "new=\"$new\" (${new.selectionInChars})"
+            )
+        }
+
+        state.editAsUser(inputTransformation = inputTransformation, notifyImeOfChanges = false) {
+            setComposingRegion(0, 5)
+            commitText("hello", 1)
+            setSelection(2, 2)
+        }
+    }
+
+    @Test
+    fun filterRan_whenOnlySelectionChanges() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
+        var filterRan = false
+        val state = TextFieldState(initialValue)
+        val inputTransformation = InputTransformation { old, new ->
+            // Filter should only run once.
+            assertThat(filterRan).isFalse()
+            filterRan = true
+            assertThat(new.toString()).isEqualTo(old.toString())
+            assertThat(old.selectionInChars).isEqualTo(TextRange(2))
+            assertThat(new.selectionInChars).isEqualTo(TextRange(0, 5))
+        }
+
+        state.editAsUser(
+            inputTransformation = inputTransformation,
+            notifyImeOfChanges = false
+        ) { setSelection(0, 5) }
+    }
+
+    @Test
+    fun filterRan_whenOnlyTextChanges() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(2), composition = null)
+        var filterRan = false
+        val state = TextFieldState(initialValue)
+        val inputTransformation = InputTransformation { old, new ->
+            // Filter should only run once.
+            assertThat(filterRan).isFalse()
+            filterRan = true
+            assertThat(new.selectionInChars).isEqualTo(old.selectionInChars)
+            assertThat(old.toString()).isEqualTo("hello")
+            assertThat(new.toString()).isEqualTo("world")
+        }
+
+        state.editAsUser(inputTransformation = inputTransformation, notifyImeOfChanges = false) {
+            deleteAll()
+            commitText("world", 1)
+            setSelection(2, 2)
+        }
+    }
+
+    @Test
+    fun stateUpdated_whenOnlyCompositionChanges_noFilter() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(5), composition = TextRange(0, 5))
+        val state = TextFieldState(initialValue)
+
+        state.editAsUser { setComposingRegion(2, 3) }
+
+        assertThat(state.text.compositionInChars).isEqualTo(TextRange(2, 3))
+    }
+
+    @Test
+    fun stateUpdated_whenOnlyCompositionChanges_withFilter() {
+        val initialValue =
+            TextFieldCharSequence("hello", selection = TextRange(5), composition = TextRange(0, 5))
+        val state = TextFieldState(initialValue)
+
+        state.editAsUser { setComposingRegion(2, 3) }
+
+        assertThat(state.text.compositionInChars).isEqualTo(TextRange(2, 3))
+    }
+
+    private fun TextFieldState(
+        value: TextFieldCharSequence
+    ) = TextFieldState(value.toString(), value.selectionInChars)
+
+    private fun TextFieldState.editAsUser(block: EditingBuffer.() -> Unit) {
+        editAsUser(null, false, block)
+    }
+}
diff --git a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogActivity.kt b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogActivity.kt
index 580b0f5..ef7bd31 100644
--- a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogActivity.kt
+++ b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogActivity.kt
@@ -19,14 +19,27 @@
 import android.os.Bundle
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
+import androidx.compose.material3.catalog.library.data.UserPreferencesRepository
 import androidx.core.view.WindowCompat
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 
 class CatalogActivity : ComponentActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         WindowCompat.setDecorFitsSystemWindows(window, false)
-        setContent {
-            CatalogApp()
+
+        // Load the favorite route before displaying any content, so we can navigate directly to the
+        // appropriate screen without flashing the UI at all.
+        CoroutineScope(Dispatchers.Default).launch {
+            val favoriteRoute = UserPreferencesRepository(this@CatalogActivity).getFavoriteRoute()
+            withContext(Dispatchers.Main) {
+                setContent {
+                    CatalogApp(initialFavoriteRoute = favoriteRoute)
+                }
+            }
         }
     }
 }
diff --git a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogApp.kt b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogApp.kt
index f776c70..1e78f35 100644
--- a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogApp.kt
+++ b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/CatalogApp.kt
@@ -20,8 +20,8 @@
 import androidx.compose.runtime.Composable
 
 @Composable
-fun CatalogApp() {
+fun CatalogApp(initialFavoriteRoute: String?) {
     CatalogTheme {
-        NavGraph()
+        NavGraph(initialFavoriteRoute = initialFavoriteRoute)
     }
 }
diff --git a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt
index d2ce9a2..d69c1f2 100644
--- a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt
+++ b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/NavGraph.kt
@@ -24,23 +24,17 @@
 import androidx.compose.material.catalog.ui.specification.Specification
 import androidx.compose.material3.catalog.library.Material3CatalogApp
 import androidx.compose.material3.catalog.library.Material3Route
-import androidx.compose.material3.catalog.library.data.UserPreferencesRepository
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.remember
-import androidx.compose.ui.platform.LocalContext
 import androidx.navigation.compose.NavHost
 import androidx.navigation.compose.composable
 import androidx.navigation.compose.rememberNavController
 
 @Composable
-fun NavGraph() {
-    val context = LocalContext.current
+fun NavGraph(initialFavoriteRoute: String?) {
     val navController = rememberNavController()
-    val userPreferencesRepository = remember { UserPreferencesRepository(context) }
     NavHost(
         navController = navController,
-        startDestination = SpecificationRoute
+        startDestination = if (initialFavoriteRoute == null) SpecificationRoute else Material3Route
     ) {
         composable(SpecificationRoute) {
             Specification(
@@ -55,12 +49,8 @@
             )
         }
         composable(MaterialRoute) { MaterialCatalogApp() }
-        composable(Material3Route) { Material3CatalogApp() }
-    }
-    LaunchedEffect(Unit) {
-        // If user has pinned any M3 Catalog screen, automatically navigate to main M3 route.
-        if (userPreferencesRepository.getFavoriteRoute() != null) {
-            navController.navigate(Material3Route)
+        composable(Material3Route) {
+            Material3CatalogApp(initialFavoriteRoute = initialFavoriteRoute)
         }
     }
 }
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
index beb3b66..c77c4e8 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
@@ -26,6 +26,7 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Favorite
@@ -39,7 +40,10 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.asAndroidBitmap
 import androidx.compose.ui.layout.LayoutCoordinates
+import androidx.compose.ui.layout.LookaheadScope
+import androidx.compose.ui.layout.SubcomposeLayout
 import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.layout.positionInParent
 import androidx.compose.ui.layout.positionInRoot
 import androidx.compose.ui.platform.LocalDensity
@@ -63,6 +67,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
+import com.google.common.truth.Truth
 import com.google.common.truth.Truth.assertThat
 import kotlin.math.roundToInt
 import kotlinx.coroutines.runBlocking
@@ -738,6 +743,44 @@
         assertThat(rule.rootHeight() - fabBottomOffsetDp - 3.dp).isLessThan(1.dp)
     }
 
+    // Regression test for b/295536718
+    @Test
+    fun scaffold_onSizeChanged_calledBeforeLookaheadPlace() {
+        var size: IntSize? = null
+        var onSizeChangedCount = 0
+        var onPlaceCount = 0
+
+        rule.setContent {
+            LookaheadScope {
+                Scaffold {
+                    SubcomposeLayout { constraints ->
+                        val measurables = subcompose("second") {
+                            Box(
+                                Modifier
+                                    .size(45.dp)
+                                    .onSizeChanged {
+                                        onSizeChangedCount++
+                                        size = it
+                                    }
+                            )
+                        }
+                        val placeables = measurables.map { it.measure(constraints) }
+
+                        layout(constraints.maxWidth, constraints.maxHeight) {
+                            onPlaceCount++
+                            Truth.assertWithMessage("Expected onSizeChangedCount to be >= 1")
+                                .that(onSizeChangedCount).isAtLeast(1)
+                            assertThat(size).isNotNull()
+                            placeables.forEach { it.place(0, 0) }
+                        }
+                    }
+                }
+            }
+        }
+
+        Truth.assertWithMessage("Expected placeCount to be >= 1").that(onPlaceCount).isAtLeast(1)
+    }
+
     private fun assertDpIsWithinThreshold(actual: Dp, expected: Dp, threshold: Dp) {
         assertThat(actual.value).isWithin(threshold.value).of(expected.value)
     }
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
index 59add59..09ee62c 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
@@ -47,8 +47,6 @@
 import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.cancelAndJoin
 import kotlinx.coroutines.launch
 
 /**
@@ -240,7 +238,6 @@
      * @param focusedElevation the elevation to use when the [FloatingActionButton] is
      * focused.
      */
-    @Suppress("UNUSED_PARAMETER")
     @Composable
     fun elevation(
         defaultElevation: Dp = 6.dp,
@@ -272,13 +269,24 @@
     @Composable
     override fun elevation(interactionSource: InteractionSource): State<Dp> {
         val animatable = remember(interactionSource) {
-            Animatable(defaultElevation, Dp.VectorConverter)
+            FloatingActionButtonElevationAnimatable(
+                defaultElevation = defaultElevation,
+                pressedElevation = pressedElevation,
+                hoveredElevation = hoveredElevation,
+                focusedElevation = focusedElevation
+            )
+        }
+
+        LaunchedEffect(this) {
+            animatable.updateElevation(
+                defaultElevation = defaultElevation,
+                pressedElevation = pressedElevation,
+                hoveredElevation = hoveredElevation,
+                focusedElevation = focusedElevation
+            )
         }
 
         LaunchedEffect(interactionSource) {
-            var animation: Job? = null
-            var lastTargetInteraction: Interaction? = null
-            var lastTarget: Dp? = null
             val interactions = mutableListOf<Interaction>()
             interactionSource.interactions.collect { interaction ->
                 when (interaction) {
@@ -305,39 +313,97 @@
                     }
                 }
                 val targetInteraction = interactions.lastOrNull()
-                val target = when (targetInteraction) {
-                    is PressInteraction.Press -> pressedElevation
-                    is HoverInteraction.Enter -> hoveredElevation
-                    is FocusInteraction.Focus -> focusedElevation
-                    else -> defaultElevation
-                }
-                if (lastTarget != target) {
-                    lastTarget = target
-                    // Cancel any existing animations if we change target
-                    animation?.cancelAndJoin()
-                    // We need to handle the case where the target has changed, but the animation
-                    // was cancelled so quickly that its internal target never got changed - if
-                    // this happened and we are back at the same target before the cancelled
-                    // animation, we don't want to do anything.
-                    if (animatable.targetValue != target) {
-                        animation = launch {
-                            try {
-                                animatable.animateElevation(
-                                    from = lastTargetInteraction,
-                                    to = targetInteraction,
-                                    target = target
-                                )
-                            } finally {
-                                lastTargetInteraction = targetInteraction
-                            }
-                        }
-                    }
+                launch {
+                    animatable.animateElevation(to = targetInteraction)
                 }
             }
         }
 
         return animatable.asState()
     }
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is DefaultFloatingActionButtonElevation) return false
+
+        if (defaultElevation != other.defaultElevation) return false
+        if (pressedElevation != other.pressedElevation) return false
+        if (hoveredElevation != other.hoveredElevation) return false
+        return focusedElevation == other.focusedElevation
+    }
+
+    override fun hashCode(): Int {
+        var result = defaultElevation.hashCode()
+        result = 31 * result + pressedElevation.hashCode()
+        result = 31 * result + hoveredElevation.hashCode()
+        result = 31 * result + focusedElevation.hashCode()
+        return result
+    }
+}
+
+private class FloatingActionButtonElevationAnimatable(
+    private var defaultElevation: Dp,
+    private var pressedElevation: Dp,
+    private var hoveredElevation: Dp,
+    private var focusedElevation: Dp
+) {
+    private val animatable = Animatable(defaultElevation, Dp.VectorConverter)
+
+    private var lastTargetInteraction: Interaction? = null
+    private var targetInteraction: Interaction? = null
+
+    private fun Interaction?.calculateTarget(): Dp {
+        return when (this) {
+            is PressInteraction.Press -> pressedElevation
+            is HoverInteraction.Enter -> hoveredElevation
+            is FocusInteraction.Focus -> focusedElevation
+            else -> defaultElevation
+        }
+    }
+
+    suspend fun updateElevation(
+        defaultElevation: Dp,
+        pressedElevation: Dp,
+        hoveredElevation: Dp,
+        focusedElevation: Dp
+    ) {
+        this.defaultElevation = defaultElevation
+        this.pressedElevation = pressedElevation
+        this.hoveredElevation = hoveredElevation
+        this.focusedElevation = focusedElevation
+        snapElevation()
+    }
+
+    private suspend fun snapElevation() {
+        val target = targetInteraction.calculateTarget()
+        if (animatable.targetValue != target) {
+            try {
+                animatable.snapTo(target)
+            } finally {
+                lastTargetInteraction = targetInteraction
+            }
+        }
+    }
+
+    suspend fun animateElevation(to: Interaction?) {
+        val target = to.calculateTarget()
+        // Update the interaction even if the values are the same, for when we change to another
+        // interaction later
+        targetInteraction = to
+        try {
+            if (animatable.targetValue != target) {
+                animatable.animateElevation(
+                    target = target,
+                    from = lastTargetInteraction,
+                    to = to
+                )
+            }
+        } finally {
+            lastTargetInteraction = to
+        }
+    }
+
+    fun asState(): State<Dp> = animatable.asState()
 }
 
 private val FabSize = 56.dp
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
index 5da9479..f5acb86 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
@@ -394,22 +394,39 @@
 
         val looseConstraints = constraints.copy(minWidth = 0, minHeight = 0)
 
-        layout(layoutWidth, layoutHeight) {
-            val topBarPlaceables = subcompose(ScaffoldLayoutContent.TopBar, topBar).fastMap {
-                it.measure(looseConstraints)
-            }
+        val topBarPlaceables = subcompose(ScaffoldLayoutContent.TopBar, topBar).fastMap {
+            it.measure(looseConstraints)
+        }
 
-            val topBarHeight = topBarPlaceables.fastMaxBy { it.height }?.height ?: 0
+        val topBarHeight = topBarPlaceables.fastMaxBy { it.height }?.height ?: 0
 
-            val snackbarPlaceables = subcompose(ScaffoldLayoutContent.Snackbar, snackbar).map {
+        val snackbarPlaceables = subcompose(ScaffoldLayoutContent.Snackbar, snackbar).map {
+            // respect only bottom and horizontal for snackbar and fab
+            val leftInset = contentWindowInsets
+                .getLeft(this@SubcomposeLayout, layoutDirection)
+            val rightInset = contentWindowInsets
+                .getRight(this@SubcomposeLayout, layoutDirection)
+            val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout)
+            // offset the snackbar constraints by the insets values
+            it.measure(
+                looseConstraints.offset(
+                    -leftInset - rightInset,
+                    -bottomInset
+                )
+            )
+        }
+
+        val snackbarHeight = snackbarPlaceables.fastMaxBy { it.height }?.height ?: 0
+
+        val fabPlaceables =
+            subcompose(ScaffoldLayoutContent.Fab, fab).fastMap { measurable ->
                 // respect only bottom and horizontal for snackbar and fab
-                val leftInset = contentWindowInsets
-                    .getLeft(this@SubcomposeLayout, layoutDirection)
-                val rightInset = contentWindowInsets
-                    .getRight(this@SubcomposeLayout, layoutDirection)
+                val leftInset =
+                    contentWindowInsets.getLeft(this@SubcomposeLayout, layoutDirection)
+                val rightInset =
+                    contentWindowInsets.getRight(this@SubcomposeLayout, layoutDirection)
                 val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout)
-                // offset the snackbar constraints by the insets values
-                it.measure(
+                measurable.measure(
                     looseConstraints.offset(
                         -leftInset - rightInset,
                         -bottomInset
@@ -417,115 +434,98 @@
                 )
             }
 
-            val snackbarHeight = snackbarPlaceables.fastMaxBy { it.height }?.height ?: 0
-
-            val fabPlaceables =
-                subcompose(ScaffoldLayoutContent.Fab, fab).fastMap { measurable ->
-                    // respect only bottom and horizontal for snackbar and fab
-                    val leftInset =
-                        contentWindowInsets.getLeft(this@SubcomposeLayout, layoutDirection)
-                    val rightInset =
-                        contentWindowInsets.getRight(this@SubcomposeLayout, layoutDirection)
-                    val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout)
-                    measurable.measure(
-                        looseConstraints.offset(
-                            -leftInset - rightInset,
-                            -bottomInset
-                        )
-                    )
-                }
-
-            val fabPlacement = if (fabPlaceables.isNotEmpty()) {
-                val fabWidth = fabPlaceables.fastMaxBy { it.width }?.width ?: 0
-                val fabHeight = fabPlaceables.fastMaxBy { it.height }?.height ?: 0
-                // FAB distance from the left of the layout, taking into account LTR / RTL
-                if (fabWidth != 0 && fabHeight != 0) {
-                    val fabLeftOffset = when (fabPosition) {
-                        FabPosition.Start -> {
-                            if (layoutDirection == LayoutDirection.Ltr) {
-                                FabSpacing.roundToPx()
-                            } else {
-                                layoutWidth - FabSpacing.roundToPx() - fabWidth
-                            }
+        val fabPlacement = if (fabPlaceables.isNotEmpty()) {
+            val fabWidth = fabPlaceables.fastMaxBy { it.width }?.width ?: 0
+            val fabHeight = fabPlaceables.fastMaxBy { it.height }?.height ?: 0
+            // FAB distance from the left of the layout, taking into account LTR / RTL
+            if (fabWidth != 0 && fabHeight != 0) {
+                val fabLeftOffset = when (fabPosition) {
+                    FabPosition.Start -> {
+                        if (layoutDirection == LayoutDirection.Ltr) {
+                            FabSpacing.roundToPx()
+                        } else {
+                            layoutWidth - FabSpacing.roundToPx() - fabWidth
                         }
-                        FabPosition.End -> {
-                            if (layoutDirection == LayoutDirection.Ltr) {
-                                layoutWidth - FabSpacing.roundToPx() - fabWidth
-                            } else {
-                                FabSpacing.roundToPx()
-                            }
-                        }
-                        else -> (layoutWidth - fabWidth) / 2
                     }
-
-                    FabPlacement(
-                        isDocked = isFabDocked,
-                        left = fabLeftOffset,
-                        width = fabWidth,
-                        height = fabHeight
-                    )
-                } else {
-                    null
+                    FabPosition.End -> {
+                        if (layoutDirection == LayoutDirection.Ltr) {
+                            layoutWidth - FabSpacing.roundToPx() - fabWidth
+                        } else {
+                            FabSpacing.roundToPx()
+                        }
+                    }
+                    else -> (layoutWidth - fabWidth) / 2
                 }
+
+                FabPlacement(
+                    isDocked = isFabDocked,
+                    left = fabLeftOffset,
+                    width = fabWidth,
+                    height = fabHeight
+                )
             } else {
                 null
             }
+        } else {
+            null
+        }
 
-            val bottomBarPlaceables = subcompose(ScaffoldLayoutContent.BottomBar) {
-                CompositionLocalProvider(
-                    LocalFabPlacement provides fabPlacement,
-                    content = bottomBar
-                )
-            }.fastMap { it.measure(looseConstraints) }
+        val bottomBarPlaceables = subcompose(ScaffoldLayoutContent.BottomBar) {
+            CompositionLocalProvider(
+                LocalFabPlacement provides fabPlacement,
+                content = bottomBar
+            )
+        }.fastMap { it.measure(looseConstraints) }
 
-            val bottomBarHeight = bottomBarPlaceables.fastMaxBy { it.height }?.height
-            val fabOffsetFromBottom = fabPlacement?.let {
-                if (bottomBarHeight == null) {
-                    it.height + FabSpacing.roundToPx() +
+        val bottomBarHeight = bottomBarPlaceables.fastMaxBy { it.height }?.height
+        val fabOffsetFromBottom = fabPlacement?.let {
+            if (bottomBarHeight == null) {
+                it.height + FabSpacing.roundToPx() +
                     contentWindowInsets.getBottom(this@SubcomposeLayout)
+            } else {
+                if (isFabDocked) {
+                    // Total height is the bottom bar height + half the FAB height
+                    bottomBarHeight + (it.height / 2)
                 } else {
-                    if (isFabDocked) {
-                        // Total height is the bottom bar height + half the FAB height
-                        bottomBarHeight + (it.height / 2)
-                    } else {
-                        // Total height is the bottom bar height + the FAB height + the padding
-                        // between the FAB and bottom bar
-                        bottomBarHeight + it.height + FabSpacing.roundToPx()
-                    }
+                    // Total height is the bottom bar height + the FAB height + the padding
+                    // between the FAB and bottom bar
+                    bottomBarHeight + it.height + FabSpacing.roundToPx()
                 }
             }
+        }
 
-            val snackbarOffsetFromBottom = if (snackbarHeight != 0) {
-                snackbarHeight +
-                    (fabOffsetFromBottom ?: bottomBarHeight
-                    ?: contentWindowInsets.getBottom(this@SubcomposeLayout))
-            } else {
-                0
-            }
+        val snackbarOffsetFromBottom = if (snackbarHeight != 0) {
+            snackbarHeight +
+                (fabOffsetFromBottom ?: bottomBarHeight
+                ?: contentWindowInsets.getBottom(this@SubcomposeLayout))
+        } else {
+            0
+        }
 
-            val bodyContentHeight = layoutHeight - topBarHeight
+        val bodyContentHeight = layoutHeight - topBarHeight
 
-            val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) {
-                val insets = contentWindowInsets.asPaddingValues(this@SubcomposeLayout)
-                val innerPadding = PaddingValues(
-                    top =
-                    if (topBarPlaceables.isEmpty()) {
-                        insets.calculateTopPadding()
-                    } else {
-                        0.dp
-                    },
-                    bottom =
-                    if (bottomBarPlaceables.isEmpty() || bottomBarHeight == null) {
-                        insets.calculateBottomPadding()
-                    } else {
-                        bottomBarHeight.toDp()
-                    },
-                    start = insets.calculateStartPadding((this@SubcomposeLayout).layoutDirection),
-                    end = insets.calculateEndPadding((this@SubcomposeLayout).layoutDirection)
-                )
-                content(innerPadding)
-            }.fastMap { it.measure(looseConstraints.copy(maxHeight = bodyContentHeight)) }
+        val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) {
+            val insets = contentWindowInsets.asPaddingValues(this@SubcomposeLayout)
+            val innerPadding = PaddingValues(
+                top =
+                if (topBarPlaceables.isEmpty()) {
+                    insets.calculateTopPadding()
+                } else {
+                    0.dp
+                },
+                bottom =
+                if (bottomBarPlaceables.isEmpty() || bottomBarHeight == null) {
+                    insets.calculateBottomPadding()
+                } else {
+                    bottomBarHeight.toDp()
+                },
+                start = insets.calculateStartPadding((this@SubcomposeLayout).layoutDirection),
+                end = insets.calculateEndPadding((this@SubcomposeLayout).layoutDirection)
+            )
+            content(innerPadding)
+        }.fastMap { it.measure(looseConstraints.copy(maxHeight = bodyContentHeight)) }
 
+        layout(layoutWidth, layoutHeight) {
             // Placing to control drawing order to match default elevation of each placeable
 
             bodyContentPlaceables.fastForEach {
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/MaterialBenchmarkExtensions.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/MaterialBenchmarkExtensions.kt
index 9308b1e..afe7cbc 100644
--- a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/MaterialBenchmarkExtensions.kt
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/MaterialBenchmarkExtensions.kt
@@ -154,7 +154,7 @@
     }
 }
 
-internal fun ComposeBenchmarkRule.benchmarkFirstPixelUntilStable(
+internal fun ComposeBenchmarkRule.benchmarkFirstRenderUntilStable(
     caseFactory: () -> LayeredComposeTestCase,
     maxSteps: Int = MaxSteps,
 ) {
@@ -169,11 +169,20 @@
             var loopCount = 0
             while (hasPendingChanges()) {
                 loopCount++
-                doFrame()
+                recomposeUntilNoChangesPending()
+                requestLayout()
+                measure()
+                layout()
+                drawPrepare()
+                draw()
+
+                runWithTimingDisabled {
+                    drawFinish()
+                }
             }
 
             if (loopCount == 1) {
-                throw AssertionError("Use benchmarkFirstLayout instead")
+                throw AssertionError("Use benchmarkToFirstPixel instead")
             }
 
             runWithTimingDisabled {
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/RangeSliderBenchmark.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/RangeSliderBenchmark.kt
new file mode 100644
index 0000000..270c5dd
--- /dev/null
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/RangeSliderBenchmark.kt
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.material3.benchmark
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.RangeSlider
+import androidx.compose.material3.RangeSliderState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkComposeMeasureLayout
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.draw.shadow
+import androidx.compose.ui.unit.dp
+import org.junit.Rule
+import org.junit.Test
+
+class RangeSliderBenchmark {
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val sliderTestCaseFactory = { RangeSliderTestCase() }
+
+    @Test
+    fun firstPixel() {
+        benchmarkRule.benchmarkFirstRenderUntilStable(sliderTestCaseFactory)
+    }
+
+    @Test
+    fun moveThumb() {
+        benchmarkRule.toggleStateBenchmarkComposeMeasureLayout(
+            caseFactory = sliderTestCaseFactory
+        )
+    }
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+internal class RangeSliderTestCase : LayeredComposeTestCase(), ToggleableTestCase {
+
+    private lateinit var state: RangeSliderState
+
+    @Composable
+    override fun MeasuredContent() {
+        state = remember { RangeSliderState(steps = 15) }
+
+        RangeSlider(
+            state = state,
+            startThumb = {
+                Spacer(
+                    Modifier
+                        .size(48.dp)
+                        .background(color = MaterialTheme.colorScheme.primary)
+                        .clip(CircleShape)
+                        .shadow(10.dp, CircleShape)
+                )
+            })
+    }
+
+    @Composable
+    override fun ContentWrappers(content: @Composable () -> Unit) {
+        MaterialTheme {
+            content()
+        }
+    }
+
+    override fun toggleState() {
+        if (state.activeRangeStart == 0f) {
+            state.activeRangeStart = 1f
+        } else {
+            state.activeRangeStart = 0f
+        }
+    }
+}
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/SliderBenchmark.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/SliderBenchmark.kt
index 633a6431..bc46d15 100644
--- a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/SliderBenchmark.kt
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/SliderBenchmark.kt
@@ -27,6 +27,7 @@
 import androidx.compose.testutils.LayeredComposeTestCase
 import androidx.compose.testutils.ToggleableTestCase
 import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkToFirstPixel
 import androidx.compose.testutils.benchmark.toggleStateBenchmarkComposeMeasureLayout
 import org.junit.Rule
 import org.junit.Test
@@ -39,7 +40,7 @@
 
     @Test
     fun firstPixel() {
-        benchmarkRule.benchmarkFirstPixelUntilStable(sliderTestCaseFactory)
+        benchmarkRule.benchmarkToFirstPixel(sliderTestCaseFactory)
     }
 
     @Test
diff --git a/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
new file mode 100644
index 0000000..05c800e
--- /dev/null
+++ b/compose/material3/benchmark/src/androidTest/java/androidx/compose/material3/benchmark/TabRowBenchmark.kt
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.material3.benchmark
+
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Tab
+import androidx.compose.material3.TabRow
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkComposeMeasureLayout
+import org.junit.Rule
+import org.junit.Test
+
+class TabRowBenchmark {
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val tabRowTestCaseFactory = { TabRowTestCase() }
+
+    @Test
+    fun firstPixel() {
+        benchmarkRule.benchmarkFirstRenderUntilStable(tabRowTestCaseFactory)
+    }
+
+    @Test
+    fun selectTab() {
+        benchmarkRule.toggleStateBenchmarkComposeMeasureLayout(
+            caseFactory = tabRowTestCaseFactory,
+            assertOneRecomposition = false
+        )
+    }
+}
+
+internal class TabRowTestCase : LayeredComposeTestCase(), ToggleableTestCase {
+
+    private var state: Int by mutableStateOf(0)
+
+    @Composable
+    override fun MeasuredContent() {
+        val titles = listOf("TAB 1", "TAB 2", "TAB 3")
+        TabRow(selectedTabIndex = state) {
+            titles.forEachIndexed { index, title ->
+                Tab(
+                    text = { Text(title) },
+                    selected = state == index,
+                    onClick = { state = index }
+                )
+            }
+        }
+    }
+
+    @Composable
+    override fun ContentWrappers(content: @Composable () -> Unit) {
+        MaterialTheme {
+            content()
+        }
+    }
+
+    override fun toggleState() {
+        if (state == 0) {
+            state = 1
+        } else {
+            state = 0
+        }
+    }
+}
diff --git a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/CatalogApp.kt b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/CatalogApp.kt
index ed9e91c..27e7745 100644
--- a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/CatalogApp.kt
+++ b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/CatalogApp.kt
@@ -27,13 +27,14 @@
 import kotlinx.coroutines.launch
 
 @Composable
-fun Material3CatalogApp() {
+fun Material3CatalogApp(initialFavoriteRoute: String?) {
     val context = LocalContext.current
     val coroutineScope = rememberCoroutineScope()
     val userPreferencesRepository = remember { UserPreferencesRepository(context) }
     val theme = userPreferencesRepository.theme.collectAsState(Theme()).value
     CatalogTheme(theme = theme) {
         NavGraph(
+            initialFavoriteRoute = initialFavoriteRoute,
             theme = theme,
             onThemeChange = { coroutineScope.launch { userPreferencesRepository.saveTheme(it) } }
         )
diff --git a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/NavGraph.kt b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/NavGraph.kt
index 80c4137..1be6c04 100644
--- a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/NavGraph.kt
+++ b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/NavGraph.kt
@@ -25,7 +25,6 @@
 import androidx.compose.material3.catalog.library.ui.example.Example
 import androidx.compose.material3.catalog.library.ui.home.Home
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
@@ -33,6 +32,7 @@
 import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.platform.LocalContext
+import androidx.navigation.NavHostController
 import androidx.navigation.NavType
 import androidx.navigation.compose.NavHost
 import androidx.navigation.compose.composable
@@ -42,6 +42,7 @@
 
 @Composable
 fun NavGraph(
+    initialFavoriteRoute: String?,
     theme: Theme,
     onThemeChange: (theme: Theme) -> Unit
 ) {
@@ -49,7 +50,7 @@
     val navController = rememberNavController()
     val coroutineScope = rememberCoroutineScope()
     val userPreferencesRepository = remember { UserPreferencesRepository(context) }
-    var favoriteRoute by rememberSaveable { mutableStateOf<String?>(null) }
+    var favoriteRoute by rememberSaveable { mutableStateOf(initialFavoriteRoute) }
     NavHost(
         navController = navController,
         startDestination = HomeRoute
@@ -126,25 +127,29 @@
             )
         }
     }
-    LaunchedEffect(Unit) {
-        // Navigate to the favorite route on launch, if there is one saved.
-        userPreferencesRepository.getFavoriteRoute()?.let { route ->
-            favoriteRoute = route
-            if (navController.currentDestination?.route == route) {
-                // Never navigate to the current route if we're already there.
-                return@let
-            }
-            if (route.startsWith(ExampleRoute)) {
-                // Navigate to the Component screen first so it's in the back stack as expected.
-                val componentRoute =
-                    route.replace(ExampleRoute, ComponentRoute).substringBeforeLast("/")
-                navController.navigate(componentRoute)
-            }
-            navController.navigate(route)
-        }
+
+    var initialLaunch by rememberSaveable { mutableStateOf(true) }
+    if (initialLaunch) {
+        // Navigate to the favorite route only on initial launch, if there is one saved.
+        maybeNavigate(navController, initialFavoriteRoute)
+        initialLaunch = false
     }
 }
 
+private fun maybeNavigate(navController: NavHostController, route: String?) {
+    if (route == null || navController.currentDestination?.route == route) {
+        // Never navigate to a null route or the current route if we're already there.
+        return
+    }
+    if (route.startsWith(ExampleRoute)) {
+        // Navigate to the Component screen first so it's in the back stack as expected.
+        val componentRoute =
+            route.replace(ExampleRoute, ComponentRoute).substringBeforeLast("/")
+        navController.navigate(componentRoute)
+    }
+    navController.navigate(route)
+}
+
 private fun Component.route() = "$ComponentRoute/$id"
 
 private fun Example.route(component: Component) =
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
index a3fcc88..85a2ddc 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
@@ -80,6 +80,8 @@
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
+import junit.framework.TestCase.assertFalse
+import junit.framework.TestCase.assertTrue
 import junit.framework.TestCase.fail
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
@@ -273,12 +275,13 @@
                 onDismissRequest = {},
                 sheetState = sheetState,
                 windowInsets = windowInsets
-                ) {
+            ) {
                 Box(
                     Modifier
                         // Deliberately use fraction != 1f
                         .fillMaxSize(0.6f)
-                        .testTag(sheetTag))
+                        .testTag(sheetTag)
+                )
             }
         }
 
@@ -309,7 +312,8 @@
                     Box(
                         Modifier
                             .fillMaxHeight(0.4f)
-                            .testTag(sheetTag)) {
+                            .testTag(sheetTag)
+                    ) {
                         Button(
                             onClick = { dispatcher.onBackPressed() },
                             modifier = Modifier.testTag(BackTestTag),
@@ -348,7 +352,8 @@
                     Box(
                         Modifier
                             .fillMaxHeight(0.6f)
-                            .testTag(sheetTag)) {
+                            .testTag(sheetTag)
+                    ) {
                         Button(
                             onClick = { dispatcher.onBackPressed() },
                             modifier = Modifier.testTag(BackTestTag),
@@ -424,14 +429,14 @@
                 sheetState = state,
                 dragHandle = null,
                 windowInsets = windowInsets
-                ) {}
+            ) {}
         }
-        assertThat(state.swipeableState.currentValue).isEqualTo(SheetValue.Hidden)
+        assertThat(state.anchoredDraggableState.currentValue).isEqualTo(SheetValue.Hidden)
         val hiddenOffset = state.requireOffset()
         scope.launch { state.show() }
         rule.waitForIdle()
 
-        assertThat(state.swipeableState.currentValue).isEqualTo(SheetValue.Expanded)
+        assertThat(state.anchoredDraggableState.currentValue).isEqualTo(SheetValue.Expanded)
         val expandedOffset = state.requireOffset()
 
         assertThat(hiddenOffset).isEqualTo(expandedOffset)
@@ -479,17 +484,16 @@
         rule.waitForIdle()
         assertThat(state.currentValue).isEqualTo(SheetValue.PartiallyExpanded) // We should
         // retain the current value if possible
-        assertThat(state.swipeableState.anchors).containsKey(SheetValue.Hidden)
-        assertThat(state.swipeableState.anchors).containsKey(SheetValue.PartiallyExpanded)
-        assertThat(state.swipeableState.anchors).containsKey(SheetValue.Expanded)
+        assertTrue(state.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.Hidden))
+        assertTrue(state.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.PartiallyExpanded))
+        assertTrue(state.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.Expanded))
 
         amountOfItems = 0 // When the sheet height is 0, we should only have a hidden anchor
         rule.waitForIdle()
         assertThat(state.currentValue).isEqualTo(SheetValue.Hidden)
-        assertThat(state.swipeableState.anchors).containsKey(SheetValue.Hidden)
-        assertThat(state.swipeableState.anchors)
-            .doesNotContainKey(SheetValue.PartiallyExpanded)
-        assertThat(state.swipeableState.anchors).doesNotContainKey(SheetValue.Expanded)
+        assertTrue(state.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.Hidden))
+        assertFalse(state.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.PartiallyExpanded))
+        assertFalse(state.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.Expanded))
     }
 
     @Test
@@ -660,10 +664,13 @@
             ModalBottomSheet(
                 onDismissRequest = {},
                 sheetState = sheetState,
-                dragHandle = { Box(
-                    Modifier
-                        .testTag(dragHandleTag)
-                        .size(dragHandleSize)) },
+                dragHandle = {
+                    Box(
+                        Modifier
+                            .testTag(dragHandleTag)
+                            .size(dragHandleSize)
+                    )
+                },
                 windowInsets = windowInsets
             ) {
                 Box(
@@ -847,10 +854,13 @@
                 WindowInsets(0) else BottomSheetDefaults.windowInsets
             ModalBottomSheet(
                 onDismissRequest = {},
-                dragHandle = { Box(
-                    Modifier
-                        .testTag(dragHandleTag)
-                        .size(dragHandleSize)) },
+                dragHandle = {
+                    Box(
+                        Modifier
+                            .testTag(dragHandleTag)
+                            .size(dragHandleSize)
+                    )
+                },
                 windowInsets = windowInsets
             ) {
                 Box(
@@ -878,10 +888,13 @@
             ModalBottomSheet(
                 onDismissRequest = {},
                 sheetState = sheetState,
-                dragHandle = { Box(
-                    Modifier
-                        .testTag(dragHandleTag)
-                        .size(dragHandleSize)) },
+                dragHandle = {
+                    Box(
+                        Modifier
+                            .testTag(dragHandleTag)
+                            .size(dragHandleSize)
+                    )
+                },
                 windowInsets = windowInsets
             ) {
                 Box(
@@ -919,10 +932,13 @@
             ModalBottomSheet(
                 onDismissRequest = {},
                 sheetState = sheetState,
-                dragHandle = { Box(
-                    Modifier
-                        .testTag(dragHandleTag)
-                        .size(dragHandleSize)) },
+                dragHandle = {
+                    Box(
+                        Modifier
+                            .testTag(dragHandleTag)
+                            .size(dragHandleSize)
+                    )
+                },
                 windowInsets = windowInsets
             ) {
                 Box(
@@ -967,10 +983,13 @@
             ModalBottomSheet(
                 onDismissRequest = {},
                 sheetState = sheetState,
-                dragHandle = { Box(
-                    Modifier
-                        .testTag(dragHandleTag)
-                        .size(dragHandleSize)) },
+                dragHandle = {
+                    Box(
+                        Modifier
+                            .testTag(dragHandleTag)
+                            .size(dragHandleSize)
+                    )
+                },
                 windowInsets = windowInsets
             ) {
                 Box(
@@ -1022,10 +1041,10 @@
         }
 
         assertThat(sheetState.currentValue).isEqualTo(SheetValue.Hidden)
-        assertThat(sheetState.swipeableState.hasAnchorForValue(SheetValue.PartiallyExpanded))
-            .isFalse()
-        assertThat(sheetState.swipeableState.hasAnchorForValue(SheetValue.Expanded))
-            .isFalse()
+        assertFalse(
+            sheetState.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.PartiallyExpanded)
+        )
+        assertFalse(sheetState.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.Expanded))
 
         scope.launch { sheetState.show() }
         rule.waitForIdle()
@@ -1061,10 +1080,10 @@
         }
 
         assertThat(sheetState.currentValue).isEqualTo(SheetValue.Hidden)
-        assertThat(sheetState.swipeableState.hasAnchorForValue(SheetValue.PartiallyExpanded))
-            .isFalse()
-        assertThat(sheetState.swipeableState.hasAnchorForValue(SheetValue.Expanded))
-            .isFalse()
+        assertFalse(
+            sheetState.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.PartiallyExpanded)
+        )
+        assertFalse(sheetState.anchoredDraggableState.anchors.hasAnchorFor(SheetValue.Expanded))
 
         scope.launch { sheetState.show() }
         rule.waitForIdle()
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ProgressIndicatorTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ProgressIndicatorTest.kt
index 0f29fea..4adc364 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ProgressIndicatorTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ProgressIndicatorTest.kt
@@ -55,6 +55,21 @@
     val rule = createComposeRule()
 
     @Test
+    fun nonMaterialSetContent() {
+        val tag = "linear"
+        val progress = mutableStateOf(0f)
+
+        rule.setContent {
+            LinearProgressIndicator(
+                modifier = Modifier.testTag(tag),
+                progress = progress.value
+            )
+        }
+
+        rule.onNodeWithTag(tag).assertIsDisplayed()
+    }
+
+    @Test
     fun determinateLinearProgressIndicator_Progress() {
         val tag = "linear"
         val progress = mutableStateOf(0f)
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ScaffoldTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ScaffoldTest.kt
index 023be9c..5ab689e 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ScaffoldTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ScaffoldTest.kt
@@ -25,6 +25,7 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.requiredSize
+import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.shadow
@@ -32,7 +33,10 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.asAndroidBitmap
 import androidx.compose.ui.layout.LayoutCoordinates
+import androidx.compose.ui.layout.LookaheadScope
+import androidx.compose.ui.layout.SubcomposeLayout
 import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.layout.positionInParent
 import androidx.compose.ui.layout.positionInRoot
 import androidx.compose.ui.platform.LocalDensity
@@ -53,6 +57,7 @@
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
 import kotlin.math.roundToInt
 import org.junit.Rule
 import org.junit.Test
@@ -614,6 +619,44 @@
         }
     }
 
+    // Regression test for b/295536718
+    @Test
+    fun scaffold_onSizeChanged_calledBeforeLookaheadPlace() {
+        var size: IntSize? = null
+        var onSizeChangedCount = 0
+        var onPlaceCount = 0
+
+        rule.setContent {
+            LookaheadScope {
+                Scaffold {
+                    SubcomposeLayout { constraints ->
+                        val measurables = subcompose("second") {
+                            Box(
+                                Modifier
+                                    .size(45.dp)
+                                    .onSizeChanged {
+                                        onSizeChangedCount++
+                                        size = it
+                                    }
+                            )
+                        }
+                        val placeables = measurables.map { it.measure(constraints) }
+
+                        layout(constraints.maxWidth, constraints.maxHeight) {
+                            onPlaceCount++
+                            assertWithMessage("Expected onSizeChangedCount to be >= 1")
+                                .that(onSizeChangedCount).isAtLeast(1)
+                            assertThat(size).isNotNull()
+                            placeables.forEach { it.place(0, 0) }
+                        }
+                    }
+                }
+            }
+        }
+
+        assertWithMessage("Expected placeCount to be >= 1").that(onPlaceCount).isAtLeast(1)
+    }
+
     private fun assertDpIsWithinThreshold(actual: Dp, expected: Dp, threshold: Dp) {
         assertThat(actual.value).isWithin(threshold.value).of(expected.value)
     }
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
index abd7fee..85e41b3 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
@@ -28,7 +28,6 @@
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.gestures.detectTapGestures
-import androidx.compose.foundation.gestures.draggable
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxWithConstraints
 import androidx.compose.foundation.layout.Column
@@ -64,6 +63,7 @@
 import androidx.compose.ui.graphics.isSpecified
 import androidx.compose.ui.input.nestedscroll.nestedScroll
 import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.platform.AbstractComposeView
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalLayoutDirection
@@ -88,7 +88,6 @@
 import java.util.UUID
 import kotlin.math.max
 import kotlin.math.roundToInt
-import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 
 /**
@@ -144,7 +143,7 @@
     }
     val scope = rememberCoroutineScope()
     val animateToDismiss: () -> Unit = {
-        if (sheetState.swipeableState.confirmValueChange(Hidden)) {
+        if (sheetState.anchoredDraggableState.confirmValueChange(Hidden)) {
             scope.launch { sheetState.hide() }.invokeOnCompletion {
                 if (!sheetState.isVisible) {
                     onDismissRequest()
@@ -158,22 +157,6 @@
         }
     }
 
-    // Callback that is invoked when the anchors have changed.
-    val anchorChangeHandler = remember(sheetState, scope) {
-        ModalBottomSheetAnchorChangeHandler(
-            state = sheetState,
-            animateTo = { target, velocity ->
-                scope.launch { sheetState.animateTo(target, velocity = velocity) }
-            },
-            snapTo = { target ->
-                val didSnapImmediately = sheetState.trySnapTo(target)
-                if (!didSnapImmediately) {
-                    scope.launch { sheetState.snapTo(target) }
-                }
-            }
-        )
-    }
-
     ModalBottomSheetPopup(
         onDismissRequest = {
             if (sheetState.currentValue == Expanded && sheetState.hasPartiallyExpandedState) {
@@ -215,13 +198,14 @@
                             )
                         }
                     )
-                    .modalBottomSheetSwipeable(
+                    .anchoredDraggable(
+                        state = sheetState.anchoredDraggableState,
+                        orientation = Orientation.Vertical,
+                        enabled = sheetState.isVisible
+                    )
+                    .modalBottomSheetAnchors(
                         sheetState = sheetState,
-                        anchorChangeHandler = anchorChangeHandler,
-                        screenHeight = fullHeight.toFloat(),
-                        onDragStopped = {
-                            settleToDismiss(it)
-                        },
+                        fullHeight = fullHeight.toFloat()
                     ),
                 shape = shape,
                 color = containerColor,
@@ -247,14 +231,17 @@
                                         }
                                         if (currentValue == PartiallyExpanded) {
                                             expand(expandActionLabel) {
-                                                if (swipeableState.confirmValueChange(Expanded)) {
+                                                if (anchoredDraggableState.confirmValueChange(
+                                                        Expanded
+                                                    )
+                                                ) {
                                                     scope.launch { sheetState.expand() }
                                                 }
                                                 true
                                             }
                                         } else if (hasPartiallyExpandedState) {
                                             collapse(collapseActionLabel) {
-                                                if (swipeableState.confirmValueChange(
+                                                if (anchoredDraggableState.confirmValueChange(
                                                         PartiallyExpanded
                                                     )
                                                 ) {
@@ -329,63 +316,32 @@
 }
 
 @ExperimentalMaterial3Api
-private fun Modifier.modalBottomSheetSwipeable(
+private fun Modifier.modalBottomSheetAnchors(
     sheetState: SheetState,
-    anchorChangeHandler: AnchorChangeHandler<SheetValue>,
-    screenHeight: Float,
-    onDragStopped: CoroutineScope.(velocity: Float) -> Unit,
-) = draggable(
-    state = sheetState.swipeableState.swipeDraggableState,
-    orientation = Orientation.Vertical,
-    enabled = sheetState.isVisible,
-    startDragImmediately = sheetState.swipeableState.isAnimationRunning,
-    onDragStopped = onDragStopped
-)
-    .swipeAnchors(
-        state = sheetState.swipeableState,
-        anchorChangeHandler = anchorChangeHandler,
-        possibleValues = setOf(Hidden, PartiallyExpanded, Expanded),
-    ) { value, sheetSize ->
-        when (value) {
-            Hidden -> screenHeight
-            PartiallyExpanded -> when {
-                sheetSize.height < screenHeight / 2 -> null
-                sheetState.skipPartiallyExpanded -> null
-                else -> screenHeight / 2f
-            }
+    fullHeight: Float
+) = onSizeChanged { sheetSize ->
 
-            Expanded -> if (sheetSize.height != 0) {
-                max(0f, screenHeight - sheetSize.height)
-            } else null
+    val newAnchors = DraggableAnchors {
+        Hidden at fullHeight
+        if (sheetSize.height > (fullHeight / 2) && !sheetState.skipPartiallyExpanded) {
+            PartiallyExpanded at fullHeight / 2f
+        }
+        if (sheetSize.height != 0) {
+            Expanded at max(0f, fullHeight - sheetSize.height)
         }
     }
 
-@ExperimentalMaterial3Api
-private fun ModalBottomSheetAnchorChangeHandler(
-    state: SheetState,
-    animateTo: (target: SheetValue, velocity: Float) -> Unit,
-    snapTo: (target: SheetValue) -> Unit,
-) = AnchorChangeHandler<SheetValue> { previousTarget, previousAnchors, newAnchors ->
-    val previousTargetOffset = previousAnchors[previousTarget]
-    val newTarget = when (previousTarget) {
+    val newTarget = when (sheetState.anchoredDraggableState.targetValue) {
         Hidden -> Hidden
         PartiallyExpanded, Expanded -> {
-            val hasPartiallyExpandedState = newAnchors.containsKey(PartiallyExpanded)
+            val hasPartiallyExpandedState = newAnchors.hasAnchorFor(PartiallyExpanded)
             val newTarget = if (hasPartiallyExpandedState) PartiallyExpanded
-            else if (newAnchors.containsKey(Expanded)) Expanded else Hidden
+            else if (newAnchors.hasAnchorFor(Expanded)) Expanded else Hidden
             newTarget
         }
     }
-    val newTargetOffset = newAnchors.getValue(newTarget)
-    if (newTargetOffset != previousTargetOffset) {
-        if (state.swipeableState.isAnimationRunning || previousAnchors.isEmpty()) {
-            // Re-target the animation to the new offset if it changed
-            animateTo(newTarget, state.swipeableState.lastVelocity)
-        } else {
-            // Snap to the new offset value of the target if no animation was running
-            snapTo(newTarget)
-        }
-    }
+
+    sheetState.anchoredDraggableState.updateAnchors(newAnchors, newTarget)
 }
 
 /**
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AnchoredDraggable.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AnchoredDraggable.kt
new file mode 100644
index 0000000..2d3d220
--- /dev/null
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AnchoredDraggable.kt
@@ -0,0 +1,791 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.material3
+
+/**
+ * This is a copy of androidx.compose.foundation.gestures.AnchoredDraggable until that API is
+ * promoted to stable in foundation. Any changes there should be replicated here.
+ */
+import androidx.annotation.FloatRange
+import androidx.compose.animation.core.AnimationSpec
+import androidx.compose.animation.core.SpringSpec
+import androidx.compose.animation.core.animate
+import androidx.compose.foundation.MutatePriority
+import androidx.compose.foundation.gestures.DragScope
+import androidx.compose.foundation.gestures.DraggableState
+import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.gestures.draggable
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.offset
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableFloatStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.Saver
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshotFlow
+import androidx.compose.runtime.structuralEqualityPolicy
+import androidx.compose.ui.Modifier
+import kotlin.math.abs
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * Structure that represents the anchors of a [AnchoredDraggableState].
+ *
+ * See the DraggableAnchors factory method to construct drag anchors using a default implementation.
+ */
+@ExperimentalMaterial3Api
+internal interface DraggableAnchors<T> {
+
+    /**
+     * Get the anchor position for an associated [value]
+     *
+     * @return The position of the anchor, or [Float.NaN] if the anchor does not exist
+     */
+    fun positionOf(value: T): Float
+
+    /**
+     * Whether there is an anchor position associated with the [value]
+     *
+     * @param value The value to look up
+     * @return true if there is an anchor for this value, false if there is no anchor for this value
+     */
+    fun hasAnchorFor(value: T): Boolean
+
+    /**
+     * Find the closest anchor to the [position].
+     *
+     * @param position The position to start searching from
+     *
+     * @return The closest anchor or null if the anchors are empty
+     */
+    fun closestAnchor(position: Float): T?
+
+    /**
+     * Find the closest anchor to the [position], in the specified direction.
+     *
+     * @param position The position to start searching from
+     * @param searchUpwards Whether to search upwards from the current position or downwards
+     *
+     * @return The closest anchor or null if the anchors are empty
+     */
+    fun closestAnchor(position: Float, searchUpwards: Boolean): T?
+
+    /**
+     * The smallest anchor, or [Float.NEGATIVE_INFINITY] if the anchors are empty.
+     */
+    fun minAnchor(): Float
+
+    /**
+     * The biggest anchor, or [Float.POSITIVE_INFINITY] if the anchors are empty.
+     */
+    fun maxAnchor(): Float
+
+    /**
+     * The amount of anchors
+     */
+    val size: Int
+}
+
+/**
+ * [DraggableAnchorsConfig] stores a mutable configuration anchors, comprised of values of [T] and
+ * corresponding [Float] positions. This [DraggableAnchorsConfig] is used to construct an immutable
+ * [DraggableAnchors] instance later on.
+ */
+@ExperimentalMaterial3Api
+internal class DraggableAnchorsConfig<T> {
+
+    internal val anchors = mutableMapOf<T, Float>()
+
+    /**
+     * Set the anchor position for [this] anchor.
+     *
+     * @param position The anchor position.
+     */
+    @Suppress("BuilderSetStyle")
+    infix fun T.at(position: Float) {
+        anchors[this] = position
+    }
+}
+
+/**
+ * Create a new [DraggableAnchors] instance using a builder function.
+ *
+ * @param builder A function with a [DraggableAnchorsConfig] that offers APIs to configure anchors
+ * @return A new [DraggableAnchors] instance with the anchor positions set by the `builder`
+ * function.
+ */
+@ExperimentalMaterial3Api
+internal fun <T : Any> DraggableAnchors(
+    builder: DraggableAnchorsConfig<T>.() -> Unit
+): DraggableAnchors<T> = MapDraggableAnchors(DraggableAnchorsConfig<T>().apply(builder).anchors)
+
+/**
+ * Enable drag gestures between a set of predefined values.
+ *
+ * When a drag is detected, the offset of the [AnchoredDraggableState] will be updated with the drag
+ * delta. You should use this offset to move your content accordingly (see [Modifier.offset]).
+ * When the drag ends, the offset will be animated to one of the anchors and when that anchor is
+ * reached, the value of the [AnchoredDraggableState] will also be updated to the value
+ * corresponding to the new anchor.
+ *
+ * Dragging is constrained between the minimum and maximum anchors.
+ *
+ * @param state The associated [AnchoredDraggableState].
+ * @param orientation The orientation in which the [anchoredDraggable] can be dragged.
+ * @param enabled Whether this [anchoredDraggable] is enabled and should react to the user's input.
+ * @param reverseDirection Whether to reverse the direction of the drag, so a top to bottom
+ * drag will behave like bottom to top, and a left to right drag will behave like right to left.
+ * @param interactionSource Optional [MutableInteractionSource] that will passed on to
+ * the internal [Modifier.draggable].
+ */
+@ExperimentalMaterial3Api
+internal fun <T> Modifier.anchoredDraggable(
+    state: AnchoredDraggableState<T>,
+    orientation: Orientation,
+    enabled: Boolean = true,
+    reverseDirection: Boolean = false,
+    interactionSource: MutableInteractionSource? = null
+) = draggable(
+    state = state.draggableState,
+    orientation = orientation,
+    enabled = enabled,
+    interactionSource = interactionSource,
+    reverseDirection = reverseDirection,
+    startDragImmediately = state.isAnimationRunning,
+    onDragStopped = { velocity -> launch { state.settle(velocity) } }
+)
+
+/**
+ * Scope used for suspending anchored drag blocks. Allows to set [AnchoredDraggableState.offset] to
+ * a new value.
+ *
+ * @see [AnchoredDraggableState.anchoredDrag] to learn how to start the anchored drag and get the
+ * access to this scope.
+ */
+@ExperimentalMaterial3Api
+internal interface AnchoredDragScope {
+    /**
+     * Assign a new value for an offset value for [AnchoredDraggableState].
+     *
+     * @param newOffset new value for [AnchoredDraggableState.offset].
+     * @param lastKnownVelocity last known velocity (if known)
+     */
+    fun dragTo(
+        newOffset: Float,
+        lastKnownVelocity: Float = 0f
+    )
+}
+
+/**
+ * State of the [anchoredDraggable] modifier.
+ * Use the constructor overload with anchors if the anchors are defined in composition, or update
+ * the anchors using [updateAnchors].
+ *
+ * This contains necessary information about any ongoing drag or animation and provides methods
+ * to change the state either immediately or by starting an animation.
+ *
+ * @param initialValue The initial value of the state.
+ * @param positionalThreshold The positional threshold, in px, to be used when calculating the
+ * target state while a drag is in progress and when settling after the drag ends. This is the
+ * distance from the start of a transition. It will be, depending on the direction of the
+ * interaction, added or subtracted from/to the origin offset. It should always be a positive value.
+ * @param velocityThreshold The velocity threshold (in px per second) that the end velocity has to
+ * exceed in order to animate to the next state, even if the [positionalThreshold] has not been
+ * reached.
+ * @param animationSpec The default animation that will be used to animate to a new state.
+ * @param confirmValueChange Optional callback invoked to confirm or veto a pending state change.
+ */
+@Suppress("PrimitiveInLambda")
+@Stable
+@ExperimentalMaterial3Api
+internal class AnchoredDraggableState<T>(
+    initialValue: T,
+    internal val positionalThreshold: (totalDistance: Float) -> Float,
+    internal val velocityThreshold: () -> Float,
+    val animationSpec: AnimationSpec<Float>,
+    internal val confirmValueChange: (newValue: T) -> Boolean = { true }
+) {
+
+    /**
+     * Construct an [AnchoredDraggableState] instance with anchors.
+     *
+     * @param initialValue The initial value of the state.
+     * @param anchors The anchors of the state. Use [updateAnchors] to update the anchors later.
+     * @param animationSpec The default animation that will be used to animate to a new state.
+     * @param confirmValueChange Optional callback invoked to confirm or veto a pending state
+     * change.
+     * @param positionalThreshold The positional threshold, in px, to be used when calculating the
+     * target state while a drag is in progress and when settling after the drag ends. This is the
+     * distance from the start of a transition. It will be, depending on the direction of the
+     * interaction, added or subtracted from/to the origin offset. It should always be a positive
+     * value.
+     * @param velocityThreshold The velocity threshold (in px per second) that the end velocity has
+     * to exceed in order to animate to the next state, even if the [positionalThreshold] has not
+     * been reached.
+     */
+    @ExperimentalMaterial3Api
+    constructor(
+        initialValue: T,
+        anchors: DraggableAnchors<T>,
+        positionalThreshold: (totalDistance: Float) -> Float,
+        velocityThreshold: () -> Float,
+        animationSpec: AnimationSpec<Float>,
+        confirmValueChange: (newValue: T) -> Boolean = { true }
+    ) : this(
+        initialValue,
+        positionalThreshold,
+        velocityThreshold,
+        animationSpec,
+        confirmValueChange
+    ) {
+        this.anchors = anchors
+        trySnapTo(initialValue)
+    }
+
+    private val dragMutex = InternalMutatorMutex()
+
+    internal val draggableState = object : DraggableState {
+
+        private val dragScope = object : DragScope {
+            override fun dragBy(pixels: Float) {
+                with(anchoredDragScope) {
+                    dragTo(newOffsetForDelta(pixels))
+                }
+            }
+        }
+
+        override suspend fun drag(
+            dragPriority: MutatePriority,
+            block: suspend DragScope.() -> Unit
+        ) {
+            [email protected](dragPriority) {
+                with(dragScope) { block() }
+            }
+        }
+
+        override fun dispatchRawDelta(delta: Float) {
+            [email protected](delta)
+        }
+    }
+
+    /**
+     * The current value of the [AnchoredDraggableState].
+     */
+    var currentValue: T by mutableStateOf(initialValue)
+        private set
+
+    /**
+     * The target value. This is the closest value to the current offset, taking into account
+     * positional thresholds. If no interactions like animations or drags are in progress, this
+     * will be the current value.
+     */
+    val targetValue: T by derivedStateOf {
+        dragTarget ?: run {
+            val currentOffset = offset
+            if (!currentOffset.isNaN()) {
+                computeTarget(currentOffset, currentValue, velocity = 0f)
+            } else currentValue
+        }
+    }
+
+    /**
+     * The closest value in the swipe direction from the current offset, not considering thresholds.
+     * If an [anchoredDrag] is in progress, this will be the target of that anchoredDrag (if
+     * specified).
+     */
+    internal val closestValue: T by derivedStateOf {
+        dragTarget ?: run {
+            val currentOffset = offset
+            if (!currentOffset.isNaN()) {
+                computeTargetWithoutThresholds(currentOffset, currentValue)
+            } else currentValue
+        }
+    }
+
+    /**
+     * The current offset, or [Float.NaN] if it has not been initialized yet.
+     *
+     * The offset will be initialized when the anchors are first set through [updateAnchors].
+     *
+     * Strongly consider using [requireOffset] which will throw if the offset is read before it is
+     * initialized. This helps catch issues early in your workflow.
+     */
+    var offset: Float by mutableFloatStateOf(Float.NaN)
+        private set
+
+    /**
+     * Require the current offset.
+     *
+     * @see offset
+     *
+     * @throws IllegalStateException If the offset has not been initialized yet
+     */
+    fun requireOffset(): Float {
+        check(!offset.isNaN()) {
+            "The offset was read before being initialized. Did you access the offset in a phase " +
+                "before layout, like effects or composition?"
+        }
+        return offset
+    }
+
+    /**
+     * Whether an animation is currently in progress.
+     */
+    val isAnimationRunning: Boolean get() = dragTarget != null
+
+    /**
+     * The fraction of the progress going from [currentValue] to [closestValue], within [0f..1f]
+     * bounds, or 1f if the [AnchoredDraggableState] is in a settled state.
+     */
+    @get:FloatRange(from = 0.0, to = 1.0)
+    val progress: Float by derivedStateOf(structuralEqualityPolicy()) {
+        val a = anchors.positionOf(currentValue)
+        val b = anchors.positionOf(closestValue)
+        val distance = abs(b - a)
+        if (!distance.isNaN() && distance > 1e-6f) {
+            val progress = (this.requireOffset() - a) / (b - a)
+            // If we are very close to 0f or 1f, we round to the closest
+            if (progress < 1e-6f) 0f else if (progress > 1 - 1e-6f) 1f else progress
+        } else 1f
+    }
+
+    /**
+     * The velocity of the last known animation. Gets reset to 0f when an animation completes
+     * successfully, but does not get reset when an animation gets interrupted.
+     * You can use this value to provide smooth reconciliation behavior when re-targeting an
+     * animation.
+     */
+    var lastVelocity: Float by mutableFloatStateOf(0f)
+        private set
+
+    private var dragTarget: T? by mutableStateOf(null)
+
+    var anchors: DraggableAnchors<T> by mutableStateOf(emptyDraggableAnchors())
+        private set
+
+    /**
+     * Update the anchors. If there is no ongoing [anchoredDrag] operation, snap to the [newTarget],
+     * otherwise restart the ongoing [anchoredDrag] operation (e.g. an animation) with the new
+     * anchors.
+     *
+     * <b>If your anchors depend on the size of the layout, updateAnchors should be called in the
+     * layout (placement) phase, e.g. through Modifier.onSizeChanged.</b> This ensures that the
+     * state is set up within the same frame.
+     * For static anchors, or anchors with different data dependencies, [updateAnchors] is safe to
+     * be called from side effects or layout.
+     *
+     * @param newAnchors The new anchors.
+     * @param newTarget The new target, by default the closest anchor or the current target if there
+     * are no anchors.
+     */
+    fun updateAnchors(
+        newAnchors: DraggableAnchors<T>,
+        newTarget: T = if (!offset.isNaN()) {
+            newAnchors.closestAnchor(offset) ?: targetValue
+        } else targetValue
+    ) {
+        if (anchors != newAnchors) {
+            anchors = newAnchors
+            // Attempt to snap. If nobody is holding the lock, we can immediately update the offset.
+            // If anybody is holding the lock, we send a signal to restart the ongoing work with the
+            // updated anchors.
+            val snapSuccessful = trySnapTo(newTarget)
+            if (!snapSuccessful) {
+                dragTarget = newTarget
+            }
+        }
+    }
+
+    /**
+     * Find the closest anchor, taking into account the [velocityThreshold] and
+     * [positionalThreshold], and settle at it with an animation.
+     *
+     * If the [velocity] is lower than the [velocityThreshold], the closest anchor by distance and
+     * [positionalThreshold] will be the target. If the [velocity] is higher than the
+     * [velocityThreshold], the [positionalThreshold] will <b>not</b> be considered and the next
+     * anchor in the direction indicated by the sign of the [velocity] will be the target.
+     */
+    suspend fun settle(velocity: Float) {
+        val previousValue = this.currentValue
+        val targetValue = computeTarget(
+            offset = requireOffset(),
+            currentValue = previousValue,
+            velocity = velocity
+        )
+        if (confirmValueChange(targetValue)) {
+            animateTo(targetValue, velocity)
+        } else {
+            // If the user vetoed the state change, rollback to the previous state.
+            animateTo(previousValue, velocity)
+        }
+    }
+
+    private fun computeTarget(
+        offset: Float,
+        currentValue: T,
+        velocity: Float
+    ): T {
+        val currentAnchors = anchors
+        val currentAnchorPosition = currentAnchors.positionOf(currentValue)
+        val velocityThresholdPx = velocityThreshold()
+        return if (currentAnchorPosition == offset || currentAnchorPosition.isNaN()) {
+            currentValue
+        } else if (currentAnchorPosition < offset) {
+            // Swiping from lower to upper (positive).
+            if (velocity >= velocityThresholdPx) {
+                currentAnchors.closestAnchor(offset, true)!!
+            } else {
+                val upper = currentAnchors.closestAnchor(offset, true)!!
+                val distance = abs(currentAnchors.positionOf(upper) - currentAnchorPosition)
+                val relativeThreshold = abs(positionalThreshold(distance))
+                val absoluteThreshold = abs(currentAnchorPosition + relativeThreshold)
+                if (offset < absoluteThreshold) currentValue else upper
+            }
+        } else {
+            // Swiping from upper to lower (negative).
+            if (velocity <= -velocityThresholdPx) {
+                currentAnchors.closestAnchor(offset, false)!!
+            } else {
+                val lower = currentAnchors.closestAnchor(offset, false)!!
+                val distance = abs(currentAnchorPosition - currentAnchors.positionOf(lower))
+                val relativeThreshold = abs(positionalThreshold(distance))
+                val absoluteThreshold = abs(currentAnchorPosition - relativeThreshold)
+                if (offset < 0) {
+                    // For negative offsets, larger absolute thresholds are closer to lower anchors
+                    // than smaller ones.
+                    if (abs(offset) < absoluteThreshold) currentValue else lower
+                } else {
+                    if (offset > absoluteThreshold) currentValue else lower
+                }
+            }
+        }
+    }
+
+    private fun computeTargetWithoutThresholds(
+        offset: Float,
+        currentValue: T,
+    ): T {
+        val currentAnchors = anchors
+        val currentAnchorPosition = currentAnchors.positionOf(currentValue)
+        return if (currentAnchorPosition == offset || currentAnchorPosition.isNaN()) {
+            currentValue
+        } else if (currentAnchorPosition < offset) {
+            currentAnchors.closestAnchor(offset, true) ?: currentValue
+        } else {
+            currentAnchors.closestAnchor(offset, false) ?: currentValue
+        }
+    }
+
+    private val anchoredDragScope: AnchoredDragScope = object : AnchoredDragScope {
+        override fun dragTo(newOffset: Float, lastKnownVelocity: Float) {
+            offset = newOffset
+            lastVelocity = lastKnownVelocity
+        }
+    }
+
+    /**
+     * Call this function to take control of drag logic and perform anchored drag with the latest
+     * anchors.
+     *
+     * All actions that change the [offset] of this [AnchoredDraggableState] must be performed
+     * within an [anchoredDrag] block (even if they don't call any other methods on this object)
+     * in order to guarantee that mutual exclusion is enforced.
+     *
+     * If [anchoredDrag] is called from elsewhere with the [dragPriority] higher or equal to ongoing
+     * drag, the ongoing drag will be cancelled.
+     *
+     * <b>If the [anchors] change while the [block] is being executed, it will be cancelled and
+     * re-executed with the latest anchors and target.</b> This allows you to target the correct
+     * state.
+     *
+     * @param dragPriority of the drag operation
+     * @param block perform anchored drag given the current anchor provided
+     */
+    suspend fun anchoredDrag(
+        dragPriority: MutatePriority = MutatePriority.Default,
+        block: suspend AnchoredDragScope.(anchors: DraggableAnchors<T>) -> Unit
+    ) {
+        try {
+            dragMutex.mutate(dragPriority) {
+                restartable(inputs = { anchors }) { latestAnchors ->
+                    anchoredDragScope.block(latestAnchors)
+                }
+            }
+        } finally {
+            val closest = anchors.closestAnchor(offset)
+            if (closest != null &&
+                abs(offset - anchors.positionOf(closest)) <= 0.5f &&
+                confirmValueChange.invoke(closest)
+            ) {
+                currentValue = closest
+            }
+        }
+    }
+
+    /**
+     * Call this function to take control of drag logic and perform anchored drag with the latest
+     * anchors and target.
+     *
+     * All actions that change the [offset] of this [AnchoredDraggableState] must be performed
+     * within an [anchoredDrag] block (even if they don't call any other methods on this object)
+     * in order to guarantee that mutual exclusion is enforced.
+     *
+     * This overload allows the caller to hint the target value that this [anchoredDrag] is intended
+     * to arrive to. This will set [AnchoredDraggableState.targetValue] to provided value so
+     * consumers can reflect it in their UIs.
+     *
+     * <b>If the [anchors] or [AnchoredDraggableState.targetValue] change while the [block] is being
+     * executed, it will be cancelled and re-executed with the latest anchors and target.</b> This
+     * allows you to target the correct state.
+     *
+     * If [anchoredDrag] is called from elsewhere with the [dragPriority] higher or equal to ongoing
+     * drag, the ongoing drag will be cancelled.
+     *
+     * @param targetValue hint the target value that this [anchoredDrag] is intended to arrive to
+     * @param dragPriority of the drag operation
+     * @param block perform anchored drag given the current anchor provided
+     */
+    suspend fun anchoredDrag(
+        targetValue: T,
+        dragPriority: MutatePriority = MutatePriority.Default,
+        block: suspend AnchoredDragScope.(anchors: DraggableAnchors<T>, targetValue: T) -> Unit
+    ) {
+        if (anchors.hasAnchorFor(targetValue)) {
+            try {
+                dragMutex.mutate(dragPriority) {
+                    dragTarget = targetValue
+                    restartable(
+                        inputs = { anchors to [email protected] }
+                    ) { (latestAnchors, latestTarget) ->
+                        anchoredDragScope.block(latestAnchors, latestTarget)
+                    }
+                }
+            } finally {
+                dragTarget = null
+                val closest = anchors.closestAnchor(offset)
+                if (closest != null &&
+                    abs(offset - anchors.positionOf(closest)) <= 0.5f &&
+                    confirmValueChange.invoke(closest)
+                ) {
+                    currentValue = closest
+                }
+            }
+        } else {
+            // Todo: b/283467401, revisit this behavior
+            currentValue = targetValue
+        }
+    }
+
+    internal fun newOffsetForDelta(delta: Float) =
+        ((if (offset.isNaN()) 0f else offset) + delta)
+            .coerceIn(anchors.minAnchor(), anchors.maxAnchor())
+
+    /**
+     * Drag by the [delta], coerce it in the bounds and dispatch it to the [AnchoredDraggableState].
+     *
+     * @return The delta the consumed by the [AnchoredDraggableState]
+     */
+    fun dispatchRawDelta(delta: Float): Float {
+        val newOffset = newOffsetForDelta(delta)
+        val oldOffset = if (offset.isNaN()) 0f else offset
+        offset = newOffset
+        return newOffset - oldOffset
+    }
+
+    /**
+     * Attempt to snap synchronously. Snapping can happen synchronously when there is no other drag
+     * transaction like a drag or an animation is progress. If there is another interaction in
+     * progress, the suspending [snapTo] overload needs to be used.
+     *
+     * @return true if the synchronous snap was successful, or false if we couldn't snap synchronous
+     */
+    private fun trySnapTo(targetValue: T): Boolean = dragMutex.tryMutate {
+        with(anchoredDragScope) {
+            val targetOffset = anchors.positionOf(targetValue)
+            if (!targetOffset.isNaN()) {
+                dragTo(targetOffset)
+                dragTarget = null
+            }
+            currentValue = targetValue
+        }
+    }
+
+    companion object {
+        /**
+         * The default [Saver] implementation for [AnchoredDraggableState].
+         */
+        @ExperimentalMaterial3Api
+        fun <T : Any> Saver(
+            animationSpec: AnimationSpec<Float>,
+            confirmValueChange: (T) -> Boolean,
+            positionalThreshold: (distance: Float) -> Float,
+            velocityThreshold: () -> Float,
+        ) = Saver<AnchoredDraggableState<T>, T>(
+            save = { it.currentValue },
+            restore = {
+                AnchoredDraggableState(
+                    initialValue = it,
+                    animationSpec = animationSpec,
+                    confirmValueChange = confirmValueChange,
+                    positionalThreshold = positionalThreshold,
+                    velocityThreshold = velocityThreshold
+                )
+            }
+        )
+    }
+}
+
+/**
+ * Snap to a [targetValue] without any animation.
+ * If the [targetValue] is not in the set of anchors, the [AnchoredDraggableState.currentValue] will
+ * be updated to the [targetValue] without updating the offset.
+ *
+ * @throws CancellationException if the interaction interrupted by another interaction like a
+ * gesture interaction or another programmatic interaction like a [animateTo] or [snapTo] call.
+ *
+ * @param targetValue The target value of the animation
+ */
+@ExperimentalMaterial3Api
+internal suspend fun <T> AnchoredDraggableState<T>.snapTo(targetValue: T) {
+    anchoredDrag(targetValue = targetValue) { anchors, latestTarget ->
+        val targetOffset = anchors.positionOf(latestTarget)
+        if (!targetOffset.isNaN()) dragTo(targetOffset)
+    }
+}
+
+/**
+ * Animate to a [targetValue].
+ * If the [targetValue] is not in the set of anchors, the [AnchoredDraggableState.currentValue] will
+ * be updated to the [targetValue] without updating the offset.
+ *
+ * @throws CancellationException if the interaction interrupted by another interaction like a
+ * gesture interaction or another programmatic interaction like a [animateTo] or [snapTo] call.
+ *
+ * @param targetValue The target value of the animation
+ * @param velocity The velocity the animation should start with
+ */
+@ExperimentalMaterial3Api
+internal suspend fun <T> AnchoredDraggableState<T>.animateTo(
+    targetValue: T,
+    velocity: Float = this.lastVelocity,
+) {
+    anchoredDrag(targetValue = targetValue) { anchors, latestTarget ->
+        val targetOffset = anchors.positionOf(latestTarget)
+        if (!targetOffset.isNaN()) {
+            var prev = if (offset.isNaN()) 0f else offset
+            animate(prev, targetOffset, velocity, animationSpec) { value, velocity ->
+                // Our onDrag coerces the value within the bounds, but an animation may
+                // overshoot, for example a spring animation or an overshooting interpolator
+                // We respect the user's intention and allow the overshoot, but still use
+                // DraggableState's drag for its mutex.
+                dragTo(value, velocity)
+                prev = value
+            }
+        }
+    }
+}
+
+/**
+ * Contains useful defaults for [anchoredDraggable] and [AnchoredDraggableState].
+ */
+@Stable
+@ExperimentalMaterial3Api
+internal object AnchoredDraggableDefaults {
+    /**
+     * The default animation used by [AnchoredDraggableState].
+     */
+    @get:ExperimentalMaterial3Api
+    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+    @ExperimentalMaterial3Api
+    val AnimationSpec = SpringSpec<Float>()
+}
+
+private class AnchoredDragFinishedSignal : CancellationException() {
+    override fun fillInStackTrace(): Throwable {
+        stackTrace = emptyArray()
+        return this
+    }
+}
+
+private suspend fun <I> restartable(inputs: () -> I, block: suspend (I) -> Unit) {
+    try {
+        coroutineScope {
+            var previousDrag: Job? = null
+            snapshotFlow(inputs)
+                .collect { latestInputs ->
+                    previousDrag?.apply {
+                        cancel(AnchoredDragFinishedSignal())
+                        join()
+                    }
+                    previousDrag = launch(start = CoroutineStart.UNDISPATCHED) {
+                        block(latestInputs)
+                        [email protected](AnchoredDragFinishedSignal())
+                    }
+                }
+        }
+    } catch (anchoredDragFinished: AnchoredDragFinishedSignal) {
+        // Ignored
+    }
+}
+
+private fun <T> emptyDraggableAnchors() = MapDraggableAnchors<T>(emptyMap())
+
+@OptIn(ExperimentalMaterial3Api::class)
+private class MapDraggableAnchors<T>(private val anchors: Map<T, Float>) : DraggableAnchors<T> {
+
+    override fun positionOf(value: T): Float = anchors[value] ?: Float.NaN
+    override fun hasAnchorFor(value: T) = anchors.containsKey(value)
+
+    override fun closestAnchor(position: Float): T? = anchors.minByOrNull {
+        abs(position - it.value)
+    }?.key
+
+    override fun closestAnchor(
+        position: Float,
+        searchUpwards: Boolean
+    ): T? {
+        return anchors.minByOrNull { (_, anchor) ->
+            val delta = if (searchUpwards) anchor - position else position - anchor
+            if (delta < 0) Float.POSITIVE_INFINITY else delta
+        }?.key
+    }
+
+    override fun minAnchor() = anchors.values.minOrNull() ?: Float.NaN
+
+    override fun maxAnchor() = anchors.values.maxOrNull() ?: Float.NaN
+
+    override val size: Int
+        get() = anchors.size
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other !is MapDraggableAnchors<*>) return false
+
+        return anchors == other.anchors
+    }
+
+    override fun hashCode() = 31 * anchors.hashCode()
+
+    override fun toString() = "MapDraggableAnchors($anchors)"
+}
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
index 0e30d0c..fe98619 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/BottomSheetScaffold.kt
@@ -38,13 +38,14 @@
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.input.nestedscroll.nestedScroll
 import androidx.compose.ui.layout.SubcomposeLayout
+import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.semantics.collapse
 import androidx.compose.ui.semantics.dismiss
 import androidx.compose.ui.semantics.expand
 import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.Dp
-import kotlin.math.max
+import androidx.compose.ui.unit.IntSize
 import kotlin.math.roundToInt
 import kotlinx.coroutines.launch
 
@@ -113,6 +114,9 @@
     contentColor: Color = contentColorFor(containerColor),
     content: @Composable (PaddingValues) -> Unit
 ) {
+    val peekHeightPx = with(LocalDensity.current) {
+        sheetPeekHeight.roundToPx()
+    }
     BottomSheetScaffoldLayout(
         modifier = modifier,
         topBar = topBar,
@@ -130,7 +134,20 @@
                 state = scaffoldState.bottomSheetState,
                 peekHeight = sheetPeekHeight,
                 sheetSwipeEnabled = sheetSwipeEnabled,
-                layoutHeight = layoutHeight.toFloat(),
+                calculateAnchors = { sheetSize ->
+                    val sheetHeight = sheetSize.height
+                    DraggableAnchors {
+                        if (!scaffoldState.bottomSheetState.skipPartiallyExpanded) {
+                            PartiallyExpanded at (layoutHeight - peekHeightPx).toFloat()
+                        }
+                        if (sheetHeight != peekHeightPx) {
+                            Expanded at maxOf(layoutHeight - sheetHeight, 0).toFloat()
+                        }
+                        if (!scaffoldState.bottomSheetState.skipHiddenState) {
+                            Hidden at layoutHeight.toFloat()
+                        }
+                    }
+                },
                 shape = sheetShape,
                 containerColor = sheetContainerColor,
                 contentColor = sheetContentColor,
@@ -197,9 +214,10 @@
 @Composable
 private fun StandardBottomSheet(
     state: SheetState,
+    @Suppress("PrimitiveInLambda")
+    calculateAnchors: (sheetSize: IntSize) -> DraggableAnchors<SheetValue>,
     peekHeight: Dp,
     sheetSwipeEnabled: Boolean,
-    layoutHeight: Float,
     shape: Shape,
     containerColor: Color,
     contentColor: Color,
@@ -209,32 +227,16 @@
     content: @Composable ColumnScope.() -> Unit
 ) {
     val scope = rememberCoroutineScope()
-    val peekHeightPx = with(LocalDensity.current) { peekHeight.toPx() }
+
     val orientation = Orientation.Vertical
 
-    // Callback that is invoked when the anchors have changed.
-    val anchorChangeHandler = remember(state, scope) {
-        BottomSheetScaffoldAnchorChangeHandler(
-            state = state,
-            animateTo = { target, velocity ->
-                scope.launch {
-                    state.swipeableState.animateTo(
-                        target, velocity = velocity
-                    )
-                }
-            },
-            snapTo = { target ->
-                scope.launch { state.swipeableState.snapTo(target) }
-            }
-        )
-    }
     Surface(
         modifier = Modifier
             .widthIn(max = BottomSheetMaxWidth)
             .fillMaxWidth()
             .requiredHeightIn(min = peekHeight)
             .nestedScroll(
-                remember(state.swipeableState) {
+                remember(state.anchoredDraggableState) {
                     ConsumeSwipeWithinBottomSheetBoundsNestedScrollConnection(
                         sheetState = state,
                         orientation = orientation,
@@ -242,26 +244,20 @@
                     )
                 }
             )
-            .swipeableV2(
-                state = state.swipeableState,
+            .anchoredDraggable(
+                state = state.anchoredDraggableState,
                 orientation = orientation,
                 enabled = sheetSwipeEnabled
             )
-            .swipeAnchors(
-                state.swipeableState,
-                possibleValues = setOf(Hidden, PartiallyExpanded, Expanded),
-                anchorChangeHandler = anchorChangeHandler
-            ) { value, sheetSize ->
-                when (value) {
-                    PartiallyExpanded -> if (state.skipPartiallyExpanded)
-                        null else layoutHeight - peekHeightPx
-                    Expanded -> if (sheetSize.height == peekHeightPx.roundToInt()) {
-                        null
-                    } else {
-                        max(0f, layoutHeight - sheetSize.height)
+            .onSizeChanged { layoutSize ->
+                val newAnchors = calculateAnchors(layoutSize)
+                val newTarget = when (state.anchoredDraggableState.targetValue) {
+                    Hidden, PartiallyExpanded -> PartiallyExpanded
+                    Expanded -> {
+                        if (newAnchors.hasAnchorFor(Expanded)) Expanded else PartiallyExpanded
                     }
-                    Hidden -> if (state.skipHiddenState) null else layoutHeight
                 }
+                state.anchoredDraggableState.updateAnchors(newAnchors, newTarget)
             },
         shape = shape,
         color = containerColor,
@@ -275,35 +271,39 @@
                     getString(Strings.BottomSheetPartialExpandDescription)
                 val dismissActionLabel = getString(Strings.BottomSheetDismissDescription)
                 val expandActionLabel = getString(Strings.BottomSheetExpandDescription)
-                Box(Modifier
-                    .align(CenterHorizontally)
-                    .semantics(mergeDescendants = true) {
-                        with(state) {
-                            // Provides semantics to interact with the bottomsheet if there is more
-                            // than one anchor to swipe to and swiping is enabled.
-                            if (swipeableState.anchors.size > 1 && sheetSwipeEnabled) {
-                                if (currentValue == PartiallyExpanded) {
-                                    if (swipeableState.confirmValueChange(Expanded)) {
-                                        expand(expandActionLabel) {
-                                            scope.launch { expand() }; true
+                Box(
+                    Modifier
+                        .align(CenterHorizontally)
+                        .semantics(mergeDescendants = true) {
+                            with(state) {
+                                // Provides semantics to interact with the bottomsheet if there is more
+                                // than one anchor to swipe to and swiping is enabled.
+                                if (anchoredDraggableState.anchors.size > 1 && sheetSwipeEnabled) {
+                                    if (currentValue == PartiallyExpanded) {
+                                        if (anchoredDraggableState.confirmValueChange(Expanded)) {
+                                            expand(expandActionLabel) {
+                                                scope.launch { expand() }; true
+                                            }
+                                        }
+                                    } else {
+                                        if (anchoredDraggableState.confirmValueChange(
+                                                PartiallyExpanded
+                                            )
+                                        ) {
+                                            collapse(partialExpandActionLabel) {
+                                                scope.launch { partialExpand() }; true
+                                            }
                                         }
                                     }
-                                } else {
-                                    if (swipeableState.confirmValueChange(PartiallyExpanded)) {
-                                        collapse(partialExpandActionLabel) {
-                                            scope.launch { partialExpand() }; true
+                                    if (!state.skipHiddenState) {
+                                        dismiss(dismissActionLabel) {
+                                            scope.launch { hide() }
+                                            true
                                         }
                                     }
                                 }
-                                if (!state.skipHiddenState) {
-                                    dismiss(dismissActionLabel) {
-                                        scope.launch { hide() }
-                                        true
-                                    }
-                                }
                             }
-                        }
-                    },
+                        },
                 ) {
                     dragHandle()
                 }
@@ -340,8 +340,6 @@
         val sheetPlaceable = subcompose(BottomSheetScaffoldLayoutSlot.Sheet) {
             bottomSheet(layoutHeight)
         }[0].measure(looseConstraints)
-        val sheetOffsetY = sheetOffset().roundToInt()
-        val sheetOffsetX = Integer.max(0, (layoutWidth - sheetPlaceable.width) / 2)
 
         val topBarPlaceable = topBar?.let {
             subcompose(BottomSheetScaffoldLayoutSlot.TopBar) { topBar() }[0]
@@ -360,13 +358,17 @@
 
         val snackbarPlaceable = subcompose(BottomSheetScaffoldLayoutSlot.Snackbar, snackbarHost)[0]
             .measure(looseConstraints)
-        val snackbarOffsetX = (layoutWidth - snackbarPlaceable.width) / 2
-        val snackbarOffsetY = when (sheetState.currentValue) {
-            PartiallyExpanded -> sheetOffsetY - snackbarPlaceable.height
-            Expanded, Hidden -> layoutHeight - snackbarPlaceable.height
-        }
 
         layout(layoutWidth, layoutHeight) {
+            val sheetOffsetY = sheetOffset().roundToInt()
+            val sheetOffsetX = Integer.max(0, (layoutWidth - sheetPlaceable.width) / 2)
+
+            val snackbarOffsetX = (layoutWidth - snackbarPlaceable.width) / 2
+            val snackbarOffsetY = when (sheetState.currentValue) {
+                PartiallyExpanded -> sheetOffsetY - snackbarPlaceable.height
+                Expanded, Hidden -> layoutHeight - snackbarPlaceable.height
+            }
+
             // Placement order is important for elevation
             bodyPlaceable.placeRelative(0, topBarHeight)
             topBarPlaceable?.placeRelative(0, 0)
@@ -376,27 +378,4 @@
     }
 }
 
-@ExperimentalMaterial3Api
-private fun BottomSheetScaffoldAnchorChangeHandler(
-    state: SheetState,
-    animateTo: (target: SheetValue, velocity: Float) -> Unit,
-    snapTo: (target: SheetValue) -> Unit,
-) = AnchorChangeHandler<SheetValue> { previousTarget, previousAnchors, newAnchors ->
-    val previousTargetOffset = previousAnchors[previousTarget]
-    val newTarget = when (previousTarget) {
-        Hidden, PartiallyExpanded -> PartiallyExpanded
-        Expanded -> if (newAnchors.containsKey(Expanded)) Expanded else PartiallyExpanded
-    }
-    val newTargetOffset = newAnchors.getValue(newTarget)
-    if (newTargetOffset != previousTargetOffset) {
-        if (state.swipeableState.isAnimationRunning) {
-            // Re-target the animation to the new offset if it changed
-            animateTo(newTarget, state.swipeableState.lastVelocity)
-        } else {
-            // Snap to the new offset value of the target if no animation was running
-            snapTo(newTarget)
-        }
-    }
-}
-
 private enum class BottomSheetScaffoldLayoutSlot { TopBar, Body, Sheet, Snackbar }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
index 127c07b..ae586c8 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
@@ -60,8 +60,6 @@
 import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.cancelAndJoin
 import kotlinx.coroutines.launch
 
 /**
@@ -506,13 +504,24 @@
     @Composable
     private fun animateElevation(interactionSource: InteractionSource): State<Dp> {
         val animatable = remember(interactionSource) {
-            Animatable(defaultElevation, Dp.VectorConverter)
+            FloatingActionButtonElevationAnimatable(
+                defaultElevation = defaultElevation,
+                pressedElevation = pressedElevation,
+                hoveredElevation = hoveredElevation,
+                focusedElevation = focusedElevation
+            )
+        }
+
+        LaunchedEffect(this) {
+            animatable.updateElevation(
+                defaultElevation = defaultElevation,
+                pressedElevation = pressedElevation,
+                hoveredElevation = hoveredElevation,
+                focusedElevation = focusedElevation
+            )
         }
 
         LaunchedEffect(interactionSource) {
-            var animation: Job? = null
-            var lastTargetInteraction: Interaction? = null
-            var lastTarget: Dp? = null
             val interactions = mutableListOf<Interaction>()
             interactionSource.interactions.collect { interaction ->
                 when (interaction) {
@@ -539,36 +548,12 @@
                     }
                 }
                 val targetInteraction = interactions.lastOrNull()
-                val target = when (targetInteraction) {
-                    is PressInteraction.Press -> pressedElevation
-                    is HoverInteraction.Enter -> hoveredElevation
-                    is FocusInteraction.Focus -> focusedElevation
-                    else -> defaultElevation
-                }
-                if (lastTarget != target) {
-                    lastTarget = target
-                    // Cancel any existing animations if we change target
-                    animation?.cancelAndJoin()
-                    // We need to handle the case where the target has changed, but the animation
-                    // was cancelled so quickly that its internal target never got changed - if
-                    // this happened and we are back at the same target before the cancelled
-                    // animation, we don't want to do anything.
-                    if (animatable.targetValue != target) {
-                        animation = launch {
-                            try {
-                                animatable.animateElevation(
-                                    from = lastTargetInteraction,
-                                    to = targetInteraction,
-                                    target = target
-                                )
-                            } finally {
-                                lastTargetInteraction = targetInteraction
-                            }
-                        }
-                    }
+                launch {
+                    animatable.animateElevation(to = targetInteraction)
                 }
             }
         }
+
         return animatable.asState()
     }
 
@@ -579,9 +564,7 @@
         if (defaultElevation != other.defaultElevation) return false
         if (pressedElevation != other.pressedElevation) return false
         if (focusedElevation != other.focusedElevation) return false
-        if (hoveredElevation != other.hoveredElevation) return false
-
-        return true
+        return hoveredElevation == other.hoveredElevation
     }
 
     override fun hashCode(): Int {
@@ -593,6 +576,71 @@
     }
 }
 
+private class FloatingActionButtonElevationAnimatable(
+    private var defaultElevation: Dp,
+    private var pressedElevation: Dp,
+    private var hoveredElevation: Dp,
+    private var focusedElevation: Dp
+) {
+    private val animatable = Animatable(defaultElevation, Dp.VectorConverter)
+
+    private var lastTargetInteraction: Interaction? = null
+    private var targetInteraction: Interaction? = null
+
+    private fun Interaction?.calculateTarget(): Dp {
+        return when (this) {
+            is PressInteraction.Press -> pressedElevation
+            is HoverInteraction.Enter -> hoveredElevation
+            is FocusInteraction.Focus -> focusedElevation
+            else -> defaultElevation
+        }
+    }
+
+    suspend fun updateElevation(
+        defaultElevation: Dp,
+        pressedElevation: Dp,
+        hoveredElevation: Dp,
+        focusedElevation: Dp
+    ) {
+        this.defaultElevation = defaultElevation
+        this.pressedElevation = pressedElevation
+        this.hoveredElevation = hoveredElevation
+        this.focusedElevation = focusedElevation
+        snapElevation()
+    }
+
+    private suspend fun snapElevation() {
+        val target = targetInteraction.calculateTarget()
+        if (animatable.targetValue != target) {
+            try {
+                animatable.snapTo(target)
+            } finally {
+                lastTargetInteraction = targetInteraction
+            }
+        }
+    }
+
+    suspend fun animateElevation(to: Interaction?) {
+        val target = to.calculateTarget()
+        // Update the interaction even if the values are the same, for when we change to another
+        // interaction later
+        targetInteraction = to
+        try {
+            if (animatable.targetValue != target) {
+                animatable.animateElevation(
+                    target = target,
+                    from = lastTargetInteraction,
+                    to = to
+                )
+            }
+        } finally {
+            lastTargetInteraction = to
+        }
+    }
+
+    fun asState(): State<Dp> = animatable.asState()
+}
+
 private val ExtendedFabStartIconPadding = 16.dp
 
 private val ExtendedFabEndIconPadding = 12.dp
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Scaffold.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Scaffold.kt
index 67fe521..355aae6 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Scaffold.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Scaffold.kt
@@ -139,128 +139,128 @@
 
         val looseConstraints = constraints.copy(minWidth = 0, minHeight = 0)
 
-        layout(layoutWidth, layoutHeight) {
-            val topBarPlaceables = subcompose(ScaffoldLayoutContent.TopBar, topBar).map {
-                it.measure(looseConstraints)
-            }
+        val topBarPlaceables = subcompose(ScaffoldLayoutContent.TopBar, topBar).map {
+            it.measure(looseConstraints)
+        }
 
-            val topBarHeight = topBarPlaceables.maxByOrNull { it.height }?.height ?: 0
+        val topBarHeight = topBarPlaceables.maxByOrNull { it.height }?.height ?: 0
 
-            val snackbarPlaceables = subcompose(ScaffoldLayoutContent.Snackbar, snackbar).map {
+        val snackbarPlaceables = subcompose(ScaffoldLayoutContent.Snackbar, snackbar).map {
+            // respect only bottom and horizontal for snackbar and fab
+            val leftInset = contentWindowInsets
+                .getLeft(this@SubcomposeLayout, layoutDirection)
+            val rightInset = contentWindowInsets
+                .getRight(this@SubcomposeLayout, layoutDirection)
+            val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout)
+            // offset the snackbar constraints by the insets values
+            it.measure(
+                looseConstraints.offset(
+                    -leftInset - rightInset,
+                    -bottomInset
+                )
+            )
+        }
+
+        val snackbarHeight = snackbarPlaceables.maxByOrNull { it.height }?.height ?: 0
+        val snackbarWidth = snackbarPlaceables.maxByOrNull { it.width }?.width ?: 0
+
+        val fabPlaceables =
+            subcompose(ScaffoldLayoutContent.Fab, fab).mapNotNull { measurable ->
                 // respect only bottom and horizontal for snackbar and fab
-                val leftInset = contentWindowInsets
-                    .getLeft(this@SubcomposeLayout, layoutDirection)
-                val rightInset = contentWindowInsets
-                    .getRight(this@SubcomposeLayout, layoutDirection)
+                val leftInset =
+                    contentWindowInsets.getLeft(this@SubcomposeLayout, layoutDirection)
+                val rightInset =
+                    contentWindowInsets.getRight(this@SubcomposeLayout, layoutDirection)
                 val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout)
-                // offset the snackbar constraints by the insets values
-                it.measure(
+                measurable.measure(
                     looseConstraints.offset(
                         -leftInset - rightInset,
                         -bottomInset
                     )
                 )
+                    .takeIf { it.height != 0 && it.width != 0 }
             }
 
-            val snackbarHeight = snackbarPlaceables.maxByOrNull { it.height }?.height ?: 0
-            val snackbarWidth = snackbarPlaceables.maxByOrNull { it.width }?.width ?: 0
-
-            val fabPlaceables =
-                subcompose(ScaffoldLayoutContent.Fab, fab).mapNotNull { measurable ->
-                    // respect only bottom and horizontal for snackbar and fab
-                    val leftInset =
-                        contentWindowInsets.getLeft(this@SubcomposeLayout, layoutDirection)
-                    val rightInset =
-                        contentWindowInsets.getRight(this@SubcomposeLayout, layoutDirection)
-                    val bottomInset = contentWindowInsets.getBottom(this@SubcomposeLayout)
-                    measurable.measure(
-                        looseConstraints.offset(
-                            -leftInset - rightInset,
-                            -bottomInset
-                        )
-                    )
-                        .takeIf { it.height != 0 && it.width != 0 }
-                }
-
-            val fabPlacement = if (fabPlaceables.isNotEmpty()) {
-                val fabWidth = fabPlaceables.maxByOrNull { it.width }!!.width
-                val fabHeight = fabPlaceables.maxByOrNull { it.height }!!.height
-                // FAB distance from the left of the layout, taking into account LTR / RTL
-                val fabLeftOffset = when (fabPosition) {
-                    FabPosition.Start -> {
-                        if (layoutDirection == LayoutDirection.Ltr) {
-                            FabSpacing.roundToPx()
-                        } else {
-                            layoutWidth - FabSpacing.roundToPx() - fabWidth
-                        }
+        val fabPlacement = if (fabPlaceables.isNotEmpty()) {
+            val fabWidth = fabPlaceables.maxByOrNull { it.width }!!.width
+            val fabHeight = fabPlaceables.maxByOrNull { it.height }!!.height
+            // FAB distance from the left of the layout, taking into account LTR / RTL
+            val fabLeftOffset = when (fabPosition) {
+                FabPosition.Start -> {
+                    if (layoutDirection == LayoutDirection.Ltr) {
+                        FabSpacing.roundToPx()
+                    } else {
+                        layoutWidth - FabSpacing.roundToPx() - fabWidth
                     }
-                    FabPosition.End -> {
-                        if (layoutDirection == LayoutDirection.Ltr) {
-                            layoutWidth - FabSpacing.roundToPx() - fabWidth
-                        } else {
-                            FabSpacing.roundToPx()
-                        }
-                    }
-                    else -> (layoutWidth - fabWidth) / 2
                 }
+                FabPosition.End -> {
+                    if (layoutDirection == LayoutDirection.Ltr) {
+                        layoutWidth - FabSpacing.roundToPx() - fabWidth
+                    } else {
+                        FabSpacing.roundToPx()
+                    }
+                }
+                else -> (layoutWidth - fabWidth) / 2
+            }
 
-                FabPlacement(
-                    left = fabLeftOffset,
-                    width = fabWidth,
-                    height = fabHeight
-                )
+            FabPlacement(
+                left = fabLeftOffset,
+                width = fabWidth,
+                height = fabHeight
+            )
+        } else {
+            null
+        }
+
+        val bottomBarPlaceables = subcompose(ScaffoldLayoutContent.BottomBar) {
+            CompositionLocalProvider(
+                LocalFabPlacement provides fabPlacement,
+                content = bottomBar
+            )
+        }.map { it.measure(looseConstraints) }
+
+        val bottomBarHeight = bottomBarPlaceables.maxByOrNull { it.height }?.height
+        val fabOffsetFromBottom = fabPlacement?.let {
+            if (bottomBarHeight == null) {
+                it.height + FabSpacing.roundToPx() +
+                    contentWindowInsets.getBottom(this@SubcomposeLayout)
             } else {
-                null
+                // Total height is the bottom bar height + the FAB height + the padding
+                // between the FAB and bottom bar
+                bottomBarHeight + it.height + FabSpacing.roundToPx()
             }
+        }
 
-            val bottomBarPlaceables = subcompose(ScaffoldLayoutContent.BottomBar) {
-                CompositionLocalProvider(
-                    LocalFabPlacement provides fabPlacement,
-                    content = bottomBar
-                )
-            }.map { it.measure(looseConstraints) }
+        val snackbarOffsetFromBottom = if (snackbarHeight != 0) {
+            snackbarHeight +
+                (fabOffsetFromBottom ?: bottomBarHeight
+                ?: contentWindowInsets.getBottom(this@SubcomposeLayout))
+        } else {
+            0
+        }
 
-            val bottomBarHeight = bottomBarPlaceables.maxByOrNull { it.height }?.height
-            val fabOffsetFromBottom = fabPlacement?.let {
-                if (bottomBarHeight == null) {
-                    it.height + FabSpacing.roundToPx() +
-                        contentWindowInsets.getBottom(this@SubcomposeLayout)
+        val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) {
+            val insets = contentWindowInsets.asPaddingValues(this@SubcomposeLayout)
+            val innerPadding = PaddingValues(
+                top =
+                if (topBarPlaceables.isEmpty()) {
+                    insets.calculateTopPadding()
                 } else {
-                    // Total height is the bottom bar height + the FAB height + the padding
-                    // between the FAB and bottom bar
-                    bottomBarHeight + it.height + FabSpacing.roundToPx()
-                }
-            }
+                    topBarHeight.toDp()
+                },
+                bottom =
+                if (bottomBarPlaceables.isEmpty() || bottomBarHeight == null) {
+                    insets.calculateBottomPadding()
+                } else {
+                    bottomBarHeight.toDp()
+                },
+                start = insets.calculateStartPadding((this@SubcomposeLayout).layoutDirection),
+                end = insets.calculateEndPadding((this@SubcomposeLayout).layoutDirection)
+            )
+            content(innerPadding)
+        }.map { it.measure(looseConstraints) }
 
-            val snackbarOffsetFromBottom = if (snackbarHeight != 0) {
-                snackbarHeight +
-                    (fabOffsetFromBottom ?: bottomBarHeight
-                    ?: contentWindowInsets.getBottom(this@SubcomposeLayout))
-            } else {
-                0
-            }
-
-            val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) {
-                val insets = contentWindowInsets.asPaddingValues(this@SubcomposeLayout)
-                val innerPadding = PaddingValues(
-                    top =
-                    if (topBarPlaceables.isEmpty()) {
-                        insets.calculateTopPadding()
-                    } else {
-                        topBarHeight.toDp()
-                    },
-                    bottom =
-                    if (bottomBarPlaceables.isEmpty() || bottomBarHeight == null) {
-                        insets.calculateBottomPadding()
-                    } else {
-                        bottomBarHeight.toDp()
-                    },
-                    start = insets.calculateStartPadding((this@SubcomposeLayout).layoutDirection),
-                    end = insets.calculateEndPadding((this@SubcomposeLayout).layoutDirection)
-                )
-                content(innerPadding)
-            }.map { it.measure(looseConstraints) }
-
+        layout(layoutWidth, layoutHeight) {
             // Placing to control drawing order to match default elevation of each placeable
 
             bodyContentPlaceables.forEach {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
index e59e502..6b853de 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
@@ -130,7 +130,7 @@
      * was in before the swipe or animation started.
      */
 
-    val currentValue: SheetValue get() = swipeableState.currentValue
+    val currentValue: SheetValue get() = anchoredDraggableState.currentValue
 
     /**
      * The target value of the bottom sheet state.
@@ -139,13 +139,13 @@
      * swipe finishes. If an animation is running, this is the target value of that animation.
      * Finally, if no swipe or animation is in progress, this is the same as the [currentValue].
      */
-    val targetValue: SheetValue get() = swipeableState.targetValue
+    val targetValue: SheetValue get() = anchoredDraggableState.targetValue
 
     /**
      * Whether the modal bottom sheet is visible.
      */
     val isVisible: Boolean
-        get() = swipeableState.currentValue != Hidden
+        get() = anchoredDraggableState.currentValue != Hidden
 
     /**
      * Require the current offset (in pixels) of the bottom sheet.
@@ -163,20 +163,20 @@
      *
      * @throws IllegalStateException If the offset has not been initialized yet
      */
-    fun requireOffset(): Float = swipeableState.requireOffset()
+    fun requireOffset(): Float = anchoredDraggableState.requireOffset()
 
     /**
      * Whether the sheet has an expanded state defined.
      */
 
     val hasExpandedState: Boolean
-        get() = swipeableState.hasAnchorForValue(Expanded)
+        get() = anchoredDraggableState.anchors.hasAnchorFor(Expanded)
 
     /**
      * Whether the modal bottom sheet has a partially expanded state defined.
      */
     val hasPartiallyExpandedState: Boolean
-        get() = swipeableState.hasAnchorForValue(PartiallyExpanded)
+        get() = anchoredDraggableState.anchors.hasAnchorFor(PartiallyExpanded)
 
     /**
      * Fully expand the bottom sheet with animation and suspend until it is fully expanded or
@@ -185,7 +185,7 @@
      * @throws [CancellationException] if the animation is interrupted
      */
     suspend fun expand() {
-        swipeableState.animateTo(Expanded)
+        anchoredDraggableState.animateTo(Expanded)
     }
 
     /**
@@ -240,9 +240,9 @@
      */
     internal suspend fun animateTo(
         targetValue: SheetValue,
-        velocity: Float = swipeableState.lastVelocity
+        velocity: Float = anchoredDraggableState.lastVelocity
     ) {
-        swipeableState.animateTo(targetValue, velocity)
+        anchoredDraggableState.animateTo(targetValue, velocity)
     }
 
     /**
@@ -254,34 +254,25 @@
      * @param targetValue The target value of the animation
      */
     internal suspend fun snapTo(targetValue: SheetValue) {
-        swipeableState.snapTo(targetValue)
+        anchoredDraggableState.snapTo(targetValue)
     }
 
     /**
-     * Attempt to snap synchronously. Snapping can happen synchronously when there is no other swipe
-     * transaction like a drag or an animation is progress. If there is another interaction in
-     * progress, the suspending [snapTo] overload needs to be used.
-     *
-     * @return true if the synchronous snap was successful, or false if we couldn't snap synchronous
-     */
-    internal fun trySnapTo(targetValue: SheetValue) = swipeableState.trySnapTo(targetValue)
-
-    /**
      * Find the closest anchor taking into account the velocity and settle at it with an animation.
      */
     internal suspend fun settle(velocity: Float) {
-        swipeableState.settle(velocity)
+        anchoredDraggableState.settle(velocity)
     }
 
-    internal var swipeableState = SwipeableV2State(
+    internal var anchoredDraggableState = AnchoredDraggableState(
         initialValue = initialValue,
-        animationSpec = SwipeableV2Defaults.AnimationSpec,
+        animationSpec = AnchoredDraggableDefaults.AnimationSpec,
         confirmValueChange = confirmValueChange,
         positionalThreshold = { with(requireDensity()) { 56.dp.toPx() } },
         velocityThreshold = { with(requireDensity()) { 125.dp.toPx() } }
     )
 
-    internal val offset: Float? get() = swipeableState.offset
+    internal val offset: Float? get() = anchoredDraggableState.offset
 
     internal var density: Density? = null
     private fun requireDensity() = requireNotNull(density) {
@@ -429,7 +420,7 @@
     override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
         val delta = available.toFloat()
         return if (delta < 0 && source == NestedScrollSource.Drag) {
-            sheetState.swipeableState.dispatchRawDelta(delta).toOffset()
+            sheetState.anchoredDraggableState.dispatchRawDelta(delta).toOffset()
         } else {
             Offset.Zero
         }
@@ -441,7 +432,7 @@
         source: NestedScrollSource
     ): Offset {
         return if (source == NestedScrollSource.Drag) {
-            sheetState.swipeableState.dispatchRawDelta(available.toFloat()).toOffset()
+            sheetState.anchoredDraggableState.dispatchRawDelta(available.toFloat()).toOffset()
         } else {
             Offset.Zero
         }
@@ -450,7 +441,8 @@
     override suspend fun onPreFling(available: Velocity): Velocity {
         val toFling = available.toFloat()
         val currentOffset = sheetState.requireOffset()
-        return if (toFling < 0 && currentOffset > sheetState.swipeableState.minOffset) {
+        val minAnchor = sheetState.anchoredDraggableState.anchors.minAnchor()
+        return if (toFling < 0 && currentOffset > minAnchor) {
             onFling(toFling)
             // since we go to the anchor with tween settling, consume all for the best UX
             available
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
index 32ea286..8f3afa4 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
@@ -58,11 +58,9 @@
 import androidx.compose.runtime.mutableStateListOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.composed
 import androidx.compose.ui.draw.shadow
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.lerp
@@ -80,7 +78,6 @@
 import androidx.compose.ui.layout.Layout
 import androidx.compose.ui.layout.layoutId
 import androidx.compose.ui.platform.LocalLayoutDirection
-import androidx.compose.ui.platform.debugInspectorInfo
 import androidx.compose.ui.semantics.contentDescription
 import androidx.compose.ui.semantics.disabled
 import androidx.compose.ui.semantics.semantics
@@ -280,6 +277,7 @@
             onValueChangeFinished
         )
     }
+
     state.value = value
     state.onValueChange = onValueChange
     state.onValueChangeFinished = onValueChangeFinished
@@ -629,7 +627,6 @@
     startInteractionSource: MutableInteractionSource = remember { MutableInteractionSource() },
     endInteractionSource: MutableInteractionSource = remember { MutableInteractionSource() },
     startThumb: @Composable (RangeSliderState) -> Unit = {
-        state.activeRangeStart
         SliderDefaults.Thumb(
             interactionSource = startInteractionSource,
             colors = colors,
@@ -740,10 +737,7 @@
         val trackOffsetY = (sliderHeight - trackPlaceable.height) / 2
         val thumbOffsetY = (sliderHeight - thumbPlaceable.height) / 2
 
-        layout(
-            sliderWidth,
-            sliderHeight
-        ) {
+        layout(sliderWidth, sliderHeight) {
             trackPlaceable.placeRelative(
                 trackOffsetX,
                 trackOffsetY
@@ -777,14 +771,8 @@
         enabled
     )
 
-    val startThumbSemantics = Modifier.rangeSliderStartThumbSemantics(
-        state,
-        enabled
-    )
-    val endThumbSemantics = Modifier.rangeSliderEndThumbSemantics(
-        state,
-        enabled
-    )
+    val startThumbSemantics = Modifier.rangeSliderStartThumbSemantics(state, enabled)
+    val endThumbSemantics = Modifier.rangeSliderEndThumbSemantics(state, enabled)
 
     val startContentDescription = getString(Strings.SliderRangeStart)
     val endContentDescription = getString(Strings.SliderRangeEnd)
@@ -1041,9 +1029,10 @@
         val activeTrackColor = colors.trackColor(enabled, active = true)
         val inactiveTickColor = colors.tickColor(enabled, active = false)
         val activeTickColor = colors.tickColor(enabled, active = true)
-        Canvas(modifier
-            .fillMaxWidth()
-            .height(TrackHeight)
+        Canvas(
+            modifier
+                .fillMaxWidth()
+                .height(TrackHeight)
         ) {
             val isRtl = layoutDirection == LayoutDirection.Rtl
             val sliderLeft = Offset(0f, center.y)
@@ -1281,7 +1270,6 @@
     state: SliderState,
     enabled: Boolean
 ): Modifier {
-    val coerced = state.value.coerceIn(state.valueRange.start, state.valueRange.endInclusive)
     return semantics {
         if (!enabled) disabled()
         setProgress(
@@ -1311,7 +1299,7 @@
 
                 // This is to keep it consistent with AbsSeekbar.java: return false if no
                 // change from current.
-                if (resolvedValue == coerced) {
+                if (resolvedValue == state.value) {
                     false
                 } else {
                     state.onValueChange(resolvedValue)
@@ -1439,34 +1427,19 @@
     state: SliderState,
     interactionSource: MutableInteractionSource,
     enabled: Boolean
-) = composed(
-    factory = {
-        if (enabled) {
-            val scope = rememberCoroutineScope()
-            pointerInput(state.draggableState, interactionSource, state.totalWidth, state.isRtl) {
-                detectTapGestures(
-                    onPress = state.press,
-                    onTap = {
-                        scope.launch {
-                            state.draggableState.drag(MutatePriority.UserInput) {
-                                // just trigger animation, press offset will be applied
-                                dragBy(0f)
-                            }
-                            state.gestureEndAction()
-                        }
-                    }
-                )
+) = if (enabled) {
+    pointerInput(state, interactionSource) {
+        detectTapGestures(
+            onPress = state.press,
+            onTap = {
+                state.draggableState.dispatchRawDelta(0f)
+                state.gestureEndAction()
             }
-        } else {
-            this
-        }
-    },
-    inspectorInfo = debugInspectorInfo {
-        name = "sliderTapModifier"
-        properties["state"] = state
-        properties["interactionSource"] = interactionSource
-        properties["enabled"] = enabled
-    })
+        )
+    }
+} else {
+    this
+}
 
 @OptIn(ExperimentalMaterial3Api::class)
 private fun Modifier.rangeSliderPressDragModifier(
@@ -1687,8 +1660,6 @@
 
 // Internal to be referred to in tests
 internal val TrackHeight = SliderTokens.InactiveTrackHeight
-private val SliderHeight = 48.dp
-private val SliderMinWidth = 144.dp // TODO: clarify min width
 
 internal class SliderDraggableState(
     val onDelta: (Float) -> Unit
@@ -1825,13 +1796,13 @@
 
     internal val tickFractions = stepsToTickFractions(steps)
 
-    private var thumbWidth by mutableFloatStateOf(ThumbWidth.value)
     internal var totalWidth by mutableIntStateOf(0)
 
     private var rawOffset by mutableFloatStateOf(scaleToOffset(0f, 0f, value))
     private var pressOffset by mutableFloatStateOf(0f)
 
     internal var isRtl = false
+    internal var thumbWidth by mutableFloatStateOf(0f)
 
     internal val coercedValueAsFraction
         get() = calcFraction(
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt
index 4506e25..4e7dcc8 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeToDismiss.kt
@@ -33,6 +33,7 @@
 import androidx.compose.runtime.saveable.Saver
 import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.unit.Density
@@ -129,38 +130,39 @@
     confirmValueChange: (DismissValue) -> Boolean = { true },
     positionalThreshold: (totalDistance: Float) -> Float
 ) {
-    internal val swipeableState = SwipeableV2State(
+    internal val anchoredDraggableState = AnchoredDraggableState(
         initialValue = initialValue,
+        animationSpec = AnchoredDraggableDefaults.AnimationSpec,
         confirmValueChange = confirmValueChange,
         positionalThreshold = positionalThreshold,
         velocityThreshold = { with(requireDensity()) { DismissThreshold.toPx() } }
     )
 
-    internal val offset: Float? get() = swipeableState.offset
+    internal val offset: Float get() = anchoredDraggableState.offset
 
     /**
      * Require the current offset.
      *
      * @throws IllegalStateException If the offset has not been initialized yet
      */
-    fun requireOffset(): Float = swipeableState.requireOffset()
+    fun requireOffset(): Float = anchoredDraggableState.requireOffset()
 
     /**
      * The current state value of the [DismissState].
      */
-    val currentValue: DismissValue get() = swipeableState.currentValue
+    val currentValue: DismissValue get() = anchoredDraggableState.currentValue
 
     /**
      * The target state. This is the closest state to the current offset (taking into account
      * positional thresholds). If no interactions like animations or drags are in progress, this
      * will be the current state.
      */
-    val targetValue: DismissValue get() = swipeableState.targetValue
+    val targetValue: DismissValue get() = anchoredDraggableState.targetValue
 
     /**
      * The fraction of the progress going from currentValue to targetValue, within [0f..1f] bounds.
      */
-    val progress: Float get() = swipeableState.progress
+    val progress: Float get() = anchoredDraggableState.progress
 
     /**
      * The direction (if any) in which the composable has been or is being dismissed.
@@ -169,9 +171,9 @@
      * change the background of the [SwipeToDismiss] if you want different actions on each side.
      */
     val dismissDirection: DismissDirection?
-        get() = if (offset == 0f || offset == null)
+        get() = if (offset == 0f || offset.isNaN())
             null
-        else if (offset!! > 0f) StartToEnd else EndToStart
+        else if (offset > 0f) StartToEnd else EndToStart
 
     /**
      * Whether the component has been dismissed in the given [direction].
@@ -188,7 +190,7 @@
      * @param targetValue The new target value
      */
     suspend fun snapTo(targetValue: DismissValue) {
-        swipeableState.snapTo(targetValue)
+        anchoredDraggableState.snapTo(targetValue)
     }
 
     /**
@@ -198,7 +200,7 @@
      *
      * @return the reason the reset animation ended
      */
-    suspend fun reset() = swipeableState.animateTo(targetValue = Default)
+    suspend fun reset() = anchoredDraggableState.animateTo(targetValue = Default)
 
     /**
      * Dismiss the component in the given [direction], with an animation and suspend. This method
@@ -208,7 +210,7 @@
      */
     suspend fun dismiss(direction: DismissDirection) {
         val targetValue = if (direction == StartToEnd) DismissedToEnd else DismissedToStart
-        swipeableState.animateTo(targetValue = targetValue)
+        anchoredDraggableState.animateTo(targetValue = targetValue)
     }
 
     internal var density: Density? = null
@@ -325,22 +327,26 @@
 
     Box(
         modifier
-            .swipeableV2(
-                state = state.swipeableState,
+            .anchoredDraggable(
+                state = state.anchoredDraggableState,
                 orientation = Orientation.Horizontal,
                 enabled = state.currentValue == Default,
                 reverseDirection = isRtl,
             )
-            .swipeAnchors(
-                state = state.swipeableState,
-                possibleValues = setOf(Default, DismissedToEnd, DismissedToStart)
-            ) { value, layoutSize ->
+            .onSizeChanged { layoutSize ->
                 val width = layoutSize.width.toFloat()
-                when (value) {
-                    DismissedToEnd -> if (StartToEnd in directions) width else null
-                    DismissedToStart -> if (EndToStart in directions) -width else null
-                    Default -> 0f
+                val newAnchors = DraggableAnchors {
+                    Default at 0f
+                    if (StartToEnd in directions) {
+                        DismissedToEnd at width
+                    }
+
+                    if (EndToStart in directions) {
+                        DismissedToStart at -width
+                    }
                 }
+
+                state.anchoredDraggableState.updateAnchors(newAnchors)
             }
     ) {
         Row(
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeableV2.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeableV2.kt
deleted file mode 100644
index dfead31..0000000
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeableV2.kt
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
- * Copyright 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-// This is a mirror of androidx.compose.material.SwipeableV2.kt from M2.
-// DO NOT MODIFY DIRECTLY, make changes upstream and mirror them.
-
-package androidx.compose.material3
-
-import androidx.annotation.FloatRange
-import androidx.compose.animation.core.AnimationSpec
-import androidx.compose.animation.core.SpringSpec
-import androidx.compose.animation.core.animate
-import androidx.compose.foundation.MutatePriority
-import androidx.compose.foundation.gestures.DragScope
-import androidx.compose.foundation.gestures.DraggableState
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.gestures.draggable
-import androidx.compose.foundation.interaction.MutableInteractionSource
-import androidx.compose.foundation.layout.offset
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Stable
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.saveable.Saver
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.layout.onSizeChanged
-import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.unit.dp
-import kotlin.math.abs
-import kotlinx.coroutines.CancellationException
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.launch
-
-/**
- * Enable swipe gestures between a set of predefined values.
- *
- * When a swipe is detected, the offset of the [SwipeableV2State] will be updated with the swipe
- * delta. You should use this offset to move your content accordingly (see [Modifier.offset]).
- * When the swipe ends, the offset will be animated to one of the anchors and when that anchor is
- * reached, the value of the [SwipeableV2State] will also be updated to the value corresponding to
- * the new anchor.
- *
- * Swiping is constrained between the minimum and maximum anchors.
- *
- * @param state The associated [SwipeableV2State].
- * @param orientation The orientation in which the swipeable can be swiped.
- * @param enabled Whether this [swipeableV2] is enabled and should react to the user's input.
- * @param reverseDirection Whether to reverse the direction of the swipe, so a top to bottom
- * swipe will behave like bottom to top, and a left to right swipe will behave like right to left.
- * @param interactionSource Optional [MutableInteractionSource] that will passed on to
- * the internal [Modifier.draggable].
- */
-@ExperimentalMaterial3Api
-internal fun <T> Modifier.swipeableV2(
-    state: SwipeableV2State<T>,
-    orientation: Orientation,
-    enabled: Boolean = true,
-    reverseDirection: Boolean = false,
-    interactionSource: MutableInteractionSource? = null
-) = draggable(
-    state = state.swipeDraggableState,
-    orientation = orientation,
-    enabled = enabled,
-    interactionSource = interactionSource,
-    reverseDirection = reverseDirection,
-    startDragImmediately = state.isAnimationRunning,
-    onDragStopped = { velocity -> launch { state.settle(velocity) } }
-)
-
-/**
- * Define anchor points for a given [SwipeableV2State] based on this node's layout size and update
- * the state with them.
- *
- * @param state The associated [SwipeableV2State]
- * @param possibleValues All possible values the [SwipeableV2State] could be in.
- * @param anchorChangeHandler A callback to be invoked when the anchors have changed,
- * `null` by default. Components with custom reconciliation logic should implement this callback,
- * i.e. to re-target an in-progress animation.
- * @param calculateAnchor This method will be invoked to calculate the position of all
- * [possibleValues], given this node's layout size. Return the anchor's offset from the initial
- * anchor, or `null` to indicate that a value does not have an anchor.
- */
-@ExperimentalMaterial3Api
-internal fun <T> Modifier.swipeAnchors(
-    state: SwipeableV2State<T>,
-    possibleValues: Set<T>,
-    anchorChangeHandler: AnchorChangeHandler<T>? = null,
-    calculateAnchor: (value: T, layoutSize: IntSize) -> Float?,
-) = onSizeChanged { layoutSize ->
-    val previousAnchors = state.anchors
-    val newAnchors = mutableMapOf<T, Float>()
-    possibleValues.forEach {
-        val anchorValue = calculateAnchor(it, layoutSize)
-        if (anchorValue != null) {
-            newAnchors[it] = anchorValue
-        }
-    }
-    if (previousAnchors != newAnchors) {
-        val previousTarget = state.targetValue
-        val stateRequiresCleanup = state.updateAnchors(newAnchors)
-        if (stateRequiresCleanup) {
-            anchorChangeHandler?.onAnchorsChanged(
-                previousTarget,
-                previousAnchors,
-                newAnchors
-            )
-        }
-    }
-}
-
-/**
- * State of the [swipeableV2] modifier.
- *
- * This contains necessary information about any ongoing swipe or animation and provides methods
- * to change the state either immediately or by starting an animation. To create and remember a
- * [SwipeableV2State] use [rememberSwipeableV2State].
- *
- * @param initialValue The initial value of the state.
- * @param animationSpec The default animation that will be used to animate to a new state.
- * @param confirmValueChange Optional callback invoked to confirm or veto a pending state change.
- * @param positionalThreshold The positional threshold, in px, to be used when calculating the
- * target state while a swipe is in progress and when settling after the swipe ends. This is the
- * distance from the start of a transition. It will be, depending on the direction of the
- * interaction, added or subtracted from/to the origin offset. It should always be a positive value.
- * @param velocityThreshold The velocity threshold (in px per second) that the end velocity has to
- * exceed in order to animate to the next state, even if the [positionalThreshold] has not been
- * reached.
- */
-@Suppress("PrimitiveInLambda")
-@Stable
-@ExperimentalMaterial3Api
-internal class SwipeableV2State<T>(
-    initialValue: T,
-    internal val positionalThreshold: (totalDistance: Float) -> Float,
-    internal val velocityThreshold: () -> Float,
-    internal val animationSpec: AnimationSpec<Float> = SwipeableV2Defaults.AnimationSpec,
-    internal val confirmValueChange: (newValue: T) -> Boolean = { true },
-) {
-
-    private val swipeMutex = InternalMutatorMutex()
-
-    internal val swipeDraggableState = object : DraggableState {
-        private val dragScope = object : DragScope {
-            override fun dragBy(pixels: Float) {
-                [email protected](pixels)
-            }
-        }
-
-        override suspend fun drag(
-            dragPriority: MutatePriority,
-            block: suspend DragScope.() -> Unit
-        ) {
-            swipe(dragPriority) { dragScope.block() }
-        }
-
-        override fun dispatchRawDelta(delta: Float) {
-            [email protected](delta)
-        }
-    }
-
-    /**
-     * The current value of the [SwipeableV2State].
-     */
-    var currentValue: T by mutableStateOf(initialValue)
-        private set
-
-    /**
-     * The target value. This is the closest value to the current offset (taking into account
-     * positional thresholds). If no interactions like animations or drags are in progress, this
-     * will be the current value.
-     */
-    val targetValue: T by derivedStateOf {
-        animationTarget ?: run {
-            val currentOffset = offset
-            if (currentOffset != null) {
-                computeTarget(currentOffset, currentValue, velocity = 0f)
-            } else currentValue
-        }
-    }
-
-    /**
-     * The current offset, or null if it has not been initialized yet.
-     *
-     * The offset will be initialized during the first measurement phase of the node that the
-     * [swipeableV2] modifier is attached to. These are the phases:
-     * Composition { -> Effects } -> Layout { Measurement -> Placement } -> Drawing
-     * During the first composition, the offset will be null. In subsequent compositions, the offset
-     * will be derived from the anchors of the previous pass.
-     * Always prefer accessing the offset from a LaunchedEffect as it will be scheduled to be
-     * executed the next frame, after layout.
-     *
-     * To guarantee stricter semantics, consider using [requireOffset].
-     */
-    @get:Suppress("AutoBoxing")
-    var offset: Float? by mutableStateOf(null)
-        private set
-
-    /**
-     * Require the current offset.
-     *
-     * @throws IllegalStateException If the offset has not been initialized yet
-     */
-    fun requireOffset(): Float = checkNotNull(offset) {
-        "The offset was read before being initialized. Did you access the offset in a phase " +
-            "before layout, like effects or composition?"
-    }
-
-    /**
-     * Whether an animation is currently in progress.
-     */
-    val isAnimationRunning: Boolean get() = animationTarget != null
-
-    /**
-     * The fraction of the progress going from [currentValue] to [targetValue], within [0f..1f]
-     * bounds.
-     */
-    @get:FloatRange(from = 0.0, to = 1.0)
-    val progress: Float by derivedStateOf {
-        val a = anchors[currentValue] ?: 0f
-        val b = anchors[targetValue] ?: 0f
-        val distance = abs(b - a)
-        if (distance > 1e-6f) {
-            val progress = (this.requireOffset() - a) / (b - a)
-            // If we are very close to 0f or 1f, we round to the closest
-            if (progress < 1e-6f) 0f else if (progress > 1 - 1e-6f) 1f else progress
-        } else 1f
-    }
-
-    /**
-     * The velocity of the last known animation. Gets reset to 0f when an animation completes
-     * successfully, but does not get reset when an animation gets interrupted.
-     * You can use this value to provide smooth reconciliation behavior when re-targeting an
-     * animation.
-     */
-    var lastVelocity: Float by mutableFloatStateOf(0f)
-        private set
-
-    /**
-     * The minimum offset this state can reach. This will be the smallest anchor, or
-     * [Float.NEGATIVE_INFINITY] if the anchors are not initialized yet.
-     */
-    val minOffset by derivedStateOf { anchors.minOrNull() ?: Float.NEGATIVE_INFINITY }
-
-    /**
-     * The maximum offset this state can reach. This will be the biggest anchor, or
-     * [Float.POSITIVE_INFINITY] if the anchors are not initialized yet.
-     */
-    val maxOffset by derivedStateOf { anchors.maxOrNull() ?: Float.POSITIVE_INFINITY }
-
-    private var animationTarget: T? by mutableStateOf(null)
-
-    internal var anchors by mutableStateOf(emptyMap<T, Float>())
-
-    /**
-     * Update the anchors.
-     * If the previous set of anchors was empty, attempt to update the offset to match the initial
-     * value's anchor.
-     *
-     * @return true if the state needs to be adjusted after updating the anchors, e.g. if the
-     * initial value is not found in the initial set of anchors. false if no further updates are
-     * needed.
-     */
-    internal fun updateAnchors(newAnchors: Map<T, Float>): Boolean {
-        val previousAnchorsEmpty = anchors.isEmpty()
-        anchors = newAnchors
-        val initialValueHasAnchor = if (previousAnchorsEmpty) {
-            val initialValue = currentValue
-            val initialValueAnchor = anchors[initialValue]
-            val initialValueHasAnchor = initialValueAnchor != null
-            if (initialValueHasAnchor) trySnapTo(initialValue)
-            initialValueHasAnchor
-        } else true
-        return !initialValueHasAnchor || !previousAnchorsEmpty
-    }
-
-    /**
-     * Whether the [value] has an anchor associated with it.
-     */
-    fun hasAnchorForValue(value: T): Boolean = anchors.containsKey(value)
-
-    /**
-     * Snap to a [targetValue] without any animation.
-     * If the [targetValue] is not in the set of anchors, the [currentValue] will be updated to the
-     * [targetValue] without updating the offset.
-     *
-     * @throws CancellationException if the interaction interrupted by another interaction like a
-     * gesture interaction or another programmatic interaction like a [animateTo] or [snapTo] call.
-     *
-     * @param targetValue The target value of the animation
-     */
-    suspend fun snapTo(targetValue: T) {
-        swipe { snap(targetValue) }
-    }
-
-    /**
-     * Animate to a [targetValue].
-     * If the [targetValue] is not in the set of anchors, the [currentValue] will be updated to the
-     * [targetValue] without updating the offset.
-     *
-     * @throws CancellationException if the interaction interrupted by another interaction like a
-     * gesture interaction or another programmatic interaction like a [animateTo] or [snapTo] call.
-     *
-     * @param targetValue The target value of the animation
-     * @param velocity The velocity the animation should start with, [lastVelocity] by default
-     */
-    suspend fun animateTo(
-        targetValue: T,
-        velocity: Float = lastVelocity,
-    ) {
-        val targetOffset = anchors[targetValue]
-        if (targetOffset != null) {
-            try {
-                swipe {
-                    animationTarget = targetValue
-                    var prev = offset ?: 0f
-                    animate(prev, targetOffset, velocity, animationSpec) { value, velocity ->
-                        // Our onDrag coerces the value within the bounds, but an animation may
-                        // overshoot, for example a spring animation or an overshooting interpolator
-                        // We respect the user's intention and allow the overshoot, but still use
-                        // DraggableState's drag for its mutex.
-                        offset = value
-                        prev = value
-                        lastVelocity = velocity
-                    }
-                    lastVelocity = 0f
-                }
-            } finally {
-                animationTarget = null
-                val endOffset = requireOffset()
-                val endState = anchors
-                    .entries
-                    .firstOrNull { (_, anchorOffset) -> abs(anchorOffset - endOffset) < 0.5f }
-                    ?.key
-                this.currentValue = endState ?: currentValue
-            }
-        } else {
-            currentValue = targetValue
-        }
-    }
-
-    /**
-     * Find the closest anchor taking into account the velocity and settle at it with an animation.
-     */
-    suspend fun settle(velocity: Float) {
-        val previousValue = this.currentValue
-        val targetValue = computeTarget(
-            offset = requireOffset(),
-            currentValue = previousValue,
-            velocity = velocity
-        )
-        if (confirmValueChange(targetValue)) {
-            animateTo(targetValue, velocity)
-        } else {
-            // If the user vetoed the state change, rollback to the previous state.
-            animateTo(previousValue, velocity)
-        }
-    }
-
-    /**
-     * Swipe by the [delta], coerce it in the bounds and dispatch it to the [SwipeableV2State].
-     *
-     * @return The delta the consumed by the [SwipeableV2State]
-     */
-    fun dispatchRawDelta(delta: Float): Float {
-        val currentDragPosition = offset ?: 0f
-        val potentiallyConsumed = currentDragPosition + delta
-        val clamped = potentiallyConsumed.coerceIn(minOffset, maxOffset)
-        val deltaToConsume = clamped - currentDragPosition
-        if (abs(deltaToConsume) >= 0) {
-            offset = ((offset ?: 0f) + deltaToConsume).coerceIn(minOffset, maxOffset)
-        }
-        return deltaToConsume
-    }
-
-    private fun computeTarget(
-        offset: Float,
-        currentValue: T,
-        velocity: Float
-    ): T {
-        val currentAnchors = anchors
-        val currentAnchor = currentAnchors[currentValue]
-        val velocityThresholdPx = velocityThreshold()
-        return if (currentAnchor == offset || currentAnchor == null) {
-            currentValue
-        } else if (currentAnchor < offset) {
-            // Swiping from lower to upper (positive).
-            if (velocity >= velocityThresholdPx) {
-                currentAnchors.closestAnchor(offset, true)
-            } else {
-                val upper = currentAnchors.closestAnchor(offset, true)
-                val distance = abs(currentAnchors.getValue(upper) - currentAnchor)
-                val relativeThreshold = abs(positionalThreshold(distance))
-                val absoluteThreshold = abs(currentAnchor + relativeThreshold)
-                if (offset < absoluteThreshold) currentValue else upper
-            }
-        } else {
-            // Swiping from upper to lower (negative).
-            if (velocity <= -velocityThresholdPx) {
-                currentAnchors.closestAnchor(offset, false)
-            } else {
-                val lower = currentAnchors.closestAnchor(offset, false)
-                val distance = abs(currentAnchor - currentAnchors.getValue(lower))
-                val relativeThreshold = abs(positionalThreshold(distance))
-                val absoluteThreshold = abs(currentAnchor - relativeThreshold)
-                if (offset < 0) {
-                    // For negative offsets, larger absolute thresholds are closer to lower anchors
-                    // than smaller ones.
-                    if (abs(offset) < absoluteThreshold) currentValue else lower
-                } else {
-                    if (offset > absoluteThreshold) currentValue else lower
-                }
-            }
-        }
-    }
-
-    private suspend fun swipe(
-        swipePriority: MutatePriority = MutatePriority.Default,
-        action: suspend () -> Unit
-    ): Unit = coroutineScope { swipeMutex.mutate(swipePriority, action) }
-
-    /**
-     * Attempt to snap synchronously. Snapping can happen synchronously when there is no other swipe
-     * transaction like a drag or an animation is progress. If there is another interaction in
-     * progress, the suspending [snapTo] overload needs to be used.
-     *
-     * @return true if the synchronous snap was successful, or false if we couldn't snap synchronous
-     */
-    internal fun trySnapTo(targetValue: T): Boolean = swipeMutex.tryMutate { snap(targetValue) }
-
-    private fun snap(targetValue: T) {
-        val targetOffset = anchors[targetValue]
-        if (targetOffset != null) {
-            dispatchRawDelta(targetOffset - (offset ?: 0f))
-            currentValue = targetValue
-            animationTarget = null
-        } else {
-            currentValue = targetValue
-        }
-    }
-
-    companion object {
-        /**
-         * The default [Saver] implementation for [SwipeableV2State].
-         */
-        @ExperimentalMaterial3Api
-        fun <T : Any> Saver(
-            animationSpec: AnimationSpec<Float>,
-            confirmValueChange: (T) -> Boolean,
-            positionalThreshold: (distance: Float) -> Float,
-            velocityThreshold: () -> Float
-        ) = Saver<SwipeableV2State<T>, T>(
-            save = { it.currentValue },
-            restore = {
-                SwipeableV2State(
-                    initialValue = it,
-                    animationSpec = animationSpec,
-                    confirmValueChange = confirmValueChange,
-                    positionalThreshold = positionalThreshold,
-                    velocityThreshold = velocityThreshold
-                )
-            }
-        )
-    }
-}
-
-/**
- * Create and remember a [SwipeableV2State].
- *
- * @param initialValue The initial value.
- * @param animationSpec The default animation that will be used to animate to a new value.
- * @param confirmValueChange Optional callback invoked to confirm or veto a pending value change.
- */
-@Suppress("PrimitiveInLambda")
-@Composable
-@ExperimentalMaterial3Api
-internal fun <T : Any> rememberSwipeableV2State(
-    initialValue: T,
-    animationSpec: AnimationSpec<Float> = SwipeableV2Defaults.AnimationSpec,
-    confirmValueChange: (newValue: T) -> Boolean = { true }
-): SwipeableV2State<T> {
-    val positionalThreshold = SwipeableV2Defaults.positionalThreshold
-    val velocityThreshold = SwipeableV2Defaults.velocityThreshold
-
-    return rememberSaveable(
-        initialValue, animationSpec, confirmValueChange, positionalThreshold, velocityThreshold,
-        saver = SwipeableV2State.Saver(
-            animationSpec = animationSpec,
-            confirmValueChange = confirmValueChange,
-            positionalThreshold = positionalThreshold,
-            velocityThreshold = velocityThreshold
-        ),
-    ) {
-        SwipeableV2State(
-            initialValue = initialValue,
-            animationSpec = animationSpec,
-            confirmValueChange = confirmValueChange,
-            positionalThreshold = positionalThreshold,
-            velocityThreshold = velocityThreshold
-        )
-    }
-}
-
-/**
- * Contains useful defaults for [swipeableV2] and [SwipeableV2State].
- */
-@Suppress("PrimitiveInLambda")
-@Stable
-@ExperimentalMaterial3Api
-internal object SwipeableV2Defaults {
-    /**
-     * The default animation used by [SwipeableV2State].
-     */
-    @ExperimentalMaterial3Api
-    val AnimationSpec = SpringSpec<Float>()
-
-    /**
-     * The default velocity threshold (1.8 dp per millisecond) used by [rememberSwipeableV2State].
-     */
-    @ExperimentalMaterial3Api
-    val velocityThreshold: () -> Float
-        @Composable get() = with(LocalDensity.current) { { 125.dp.toPx() } }
-
-    /**
-     * The default positional threshold (56 dp) used by [rememberSwipeableV2State]
-     */
-    @ExperimentalMaterial3Api
-    val positionalThreshold: (totalDistance: Float) -> Float
-        @Composable get() = with(LocalDensity.current) {
-            { 56.dp.toPx() }
-        }
-
-    /**
-     * A [AnchorChangeHandler] implementation that attempts to reconcile an in-progress animation
-     * by re-targeting it if necessary or finding the closest new anchor.
-     * If the previous anchor is not in the new set of anchors, this implementation will snap to the
-     * closest anchor.
-     *
-     * Consider implementing a custom handler for more complex components like sheets.
-     * The [animate] and [snap] lambdas hoist the animation and snap logic. Usually these will just
-     * delegate to [SwipeableV2State].
-     *
-     * @param state The [SwipeableV2State] the change handler will read from
-     * @param animate A lambda that gets invoked to start an animation to a new target
-     * @param snap A lambda that gets invoked to snap to a new target
-     */
-    @ExperimentalMaterial3Api
-    internal fun <T> ReconcileAnimationOnAnchorChangeHandler(
-        state: SwipeableV2State<T>,
-        animate: (target: T, velocity: Float) -> Unit,
-        snap: (target: T) -> Unit
-    ) = AnchorChangeHandler { previousTarget, previousAnchors, newAnchors ->
-        val previousTargetOffset = previousAnchors[previousTarget]
-        val newTargetOffset = newAnchors[previousTarget]
-        if (previousTargetOffset != newTargetOffset) {
-            if (newTargetOffset != null) {
-                animate(previousTarget, state.lastVelocity)
-            } else {
-                snap(newAnchors.closestAnchor(offset = state.requireOffset()))
-            }
-        }
-    }
-}
-
-/**
- * Defines a callback that is invoked when the anchors have changed.
- *
- * Components with custom reconciliation logic should implement this callback, for example to
- * re-target an in-progress animation when the anchors change.
- *
- * @see SwipeableV2Defaults.ReconcileAnimationOnAnchorChangeHandler for a default implementation
- */
-@ExperimentalMaterial3Api
-internal fun interface AnchorChangeHandler<T> {
-
-    /**
-     * Callback that is invoked when the anchors have changed, after the [SwipeableV2State] has been
-     * updated with them. Use this hook to re-launch animations or interrupt them if needed.
-     *
-     * @param previousTargetValue The target value before the anchors were updated
-     * @param previousAnchors The previously set anchors
-     * @param newAnchors The newly set anchors
-     */
-    fun onAnchorsChanged(
-        previousTargetValue: T,
-        previousAnchors: Map<T, Float>,
-        newAnchors: Map<T, Float>
-    )
-}
-
-private fun <T> Map<T, Float>.closestAnchor(
-    offset: Float = 0f,
-    searchUpwards: Boolean = false
-): T {
-    require(isNotEmpty()) { "The anchors were empty when trying to find the closest anchor" }
-    return minBy { (_, anchor) ->
-        val delta = if (searchUpwards) anchor - offset else offset - anchor
-        if (delta < 0) Float.POSITIVE_INFINITY else delta
-    }.key
-}
-
-private fun <T> Map<T, Float>.minOrNull() = minOfOrNull { (_, offset) -> offset }
-private fun <T> Map<T, Float>.maxOrNull() = maxOfOrNull { (_, offset) -> offset }
diff --git a/compose/runtime/buildSrc b/compose/runtime/buildSrc
deleted file mode 120000
index da68aba..0000000
--- a/compose/runtime/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../../buildSrc
\ No newline at end of file
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/build.gradle b/compose/runtime/runtime/compose-runtime-benchmark/build.gradle
index e9e2312..915a021 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/build.gradle
+++ b/compose/runtime/runtime/compose-runtime-benchmark/build.gradle
@@ -25,9 +25,6 @@
     defaultConfig {
         minSdkVersion 21
     }
-    lintOptions {
-        disable("SyntheticAccessor")
-    }
     namespace "androidx.compose.runtime.benchmark"
 }
 
diff --git a/compose/runtime/settings.gradle b/compose/runtime/settings.gradle
index b1ee839..49603fa 100644
--- a/compose/runtime/settings.gradle
+++ b/compose/runtime/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../../playground-common/playground-plugin"
+    apply from: "../../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/compose/ui/ui-inspection/build.gradle b/compose/ui/ui-inspection/build.gradle
index 551b880..6c8a650 100644
--- a/compose/ui/ui-inspection/build.gradle
+++ b/compose/ui/ui-inspection/build.gradle
@@ -86,11 +86,6 @@
             version libs.versions.cmake.get()
         }
     }
-
-    lintOptions {
-        // Restriction not important for inspectors, which only runs at dev-time
-        disable("SyntheticAccessor")
-    }
     namespace "androidx.compose.ui.inspection"
 }
 
diff --git a/compose/ui/ui-inspection/lint-baseline.xml b/compose/ui/ui-inspection/lint-baseline.xml
deleted file mode 100644
index 19cdc15..0000000
--- a/compose/ui/ui-inspection/lint-baseline.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
-
-    <issue
-        id="BanThreadSleep"
-        message="Uses Thread.sleep()"
-        errorLine1="            Thread.sleep(50)"
-        errorLine2="                   ~~~~~">
-        <location
-            file="src/androidTest/java/androidx/compose/ui/inspection/rules/DebugViewAttributeRule.kt"/>
-    </issue>
-
-</issues>
diff --git a/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt b/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt
index d354263..b0fa40f 100644
--- a/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt
+++ b/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/AndroidAssertions.android.kt
@@ -23,7 +23,9 @@
 import androidx.compose.ui.semantics.SemanticsNode
 import androidx.test.espresso.matcher.ViewMatchers
 
-internal actual fun SemanticsNodeInteraction.checkIsDisplayed(): Boolean {
+internal actual fun SemanticsNodeInteraction.checkIsDisplayed(
+    assertIsFullyVisible: Boolean
+): Boolean {
     // hierarchy check - check layout nodes are visible
     val errorMessageOnFail = "Failed to perform isDisplayed check."
     val node = fetchSemanticsNode(errorMessageOnFail)
@@ -45,7 +47,7 @@
 
     // check node doesn't clip unintentionally (e.g. row too small for content)
     val globalRect = node.boundsInWindow
-    if (!node.isInScreenBounds()) {
+    if (!node.isInScreenBounds(assertIsFullyVisible)) {
         return false
     }
 
@@ -61,7 +63,7 @@
     return boundsInRoot.translate(rootLocationInWindow)
 }
 
-internal actual fun SemanticsNode.isInScreenBounds(): Boolean {
+internal actual fun SemanticsNode.isInScreenBounds(assertIsFullyVisible: Boolean): Boolean {
     val composeView = (root as ViewRootForTest).view
 
     // Window relative bounds of our node
@@ -76,10 +78,23 @@
         return false
     }
 
-    return nodeBoundsInWindow.top >= globalRootRect.top &&
-        nodeBoundsInWindow.left >= globalRootRect.left &&
-        nodeBoundsInWindow.right <= globalRootRect.right &&
-        nodeBoundsInWindow.bottom <= globalRootRect.bottom
+    return if (assertIsFullyVisible) {
+        // assertIsNotDisplayed only throws if the element is fully onscreen
+        return nodeBoundsInWindow.top >= globalRootRect.top &&
+            nodeBoundsInWindow.left >= globalRootRect.left &&
+            nodeBoundsInWindow.right <= globalRootRect.right &&
+            nodeBoundsInWindow.bottom <= globalRootRect.bottom
+    } else {
+        // assertIsDisplayed only throws if the element is fully offscreen
+        !nodeBoundsInWindow.intersect(
+            Rect(
+                globalRootRect.left.toFloat(),
+                globalRootRect.top.toFloat(),
+                globalRootRect.right.toFloat(),
+                globalRootRect.bottom.toFloat()
+            )
+        ).isEmpty
+    }
 }
 
 /**
diff --git a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Assertions.kt b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Assertions.kt
index 0c8cbbf..ed33835 100644
--- a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Assertions.kt
+++ b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Assertions.kt
@@ -24,13 +24,16 @@
 /**
  * Asserts that the current semantics node is displayed on screen.
  *
+ * Specifically, the node must be composed, placed and at least a portion of its bounds must be
+ * visible on screen after clipping is applied.
+ *
  * Throws [AssertionError] if the node is not displayed.
  */
 fun SemanticsNodeInteraction.assertIsDisplayed(): SemanticsNodeInteraction {
     // TODO(b/143607231): check semantics hidden property
     // TODO(b/143608742): check the correct AndroidCraneView is visible
 
-    if (!checkIsDisplayed()) {
+    if (!checkIsDisplayed(assertIsFullyVisible = false)) {
         // TODO(b/133217292)
         throw AssertionError("Assert failed: The component is not displayed!")
     }
@@ -46,7 +49,7 @@
     // TODO(b/143607231): check semantics hidden property
     // TODO(b/143608742): check no AndroidCraneView contains the given component
 
-    if (checkIsDisplayed()) {
+    if (checkIsDisplayed(assertIsFullyVisible = true)) {
         // TODO(b/133217292)
         throw AssertionError("Assert failed: The component is displayed!")
     }
@@ -349,8 +352,10 @@
     return this
 }
 
-internal expect fun SemanticsNodeInteraction.checkIsDisplayed(): Boolean
+internal expect fun SemanticsNodeInteraction.checkIsDisplayed(
+    assertIsFullyVisible: Boolean
+): Boolean
 
 internal expect fun SemanticsNode.clippedNodeBoundsInWindow(): Rect
 
-internal expect fun SemanticsNode.isInScreenBounds(): Boolean
+internal expect fun SemanticsNode.isInScreenBounds(assertIsFullyVisible: Boolean): Boolean
diff --git a/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopAssertions.desktop.kt b/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopAssertions.desktop.kt
index 375a472..ca496a9 100644
--- a/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopAssertions.desktop.kt
+++ b/compose/ui/ui-test/src/desktopMain/kotlin/androidx/compose/ui/test/DesktopAssertions.desktop.kt
@@ -19,7 +19,9 @@
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.semantics.SemanticsNode
 
-internal actual fun SemanticsNodeInteraction.checkIsDisplayed(): Boolean {
+internal actual fun SemanticsNodeInteraction.checkIsDisplayed(
+    assertIsFullyVisible: Boolean
+): Boolean {
     TODO()
 }
 
@@ -27,6 +29,6 @@
     TODO()
 }
 
-internal actual fun SemanticsNode.isInScreenBounds(): Boolean {
+internal actual fun SemanticsNode.isInScreenBounds(assertIsFullyVisible: Boolean): Boolean {
     TODO()
 }
diff --git a/compose/ui/ui-text-google-fonts/lint-baseline.xml b/compose/ui/ui-text-google-fonts/lint-baseline.xml
new file mode 100644
index 0000000..e45487ab
--- /dev/null
+++ b/compose/ui/ui-text-google-fonts/lint-baseline.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="FontResourcesParserCompat.readCerts can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="    return FontResourcesParserCompat.readCerts(resources, certificatesRes)"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/googlefonts/FontProviderHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontResourcesParserCompat.readCerts can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="    return FontResourcesParserCompat.readCerts(resources, certificatesRes)"
+        errorLine2="                                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/googlefonts/FontProviderHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontResourcesParserCompat.readCerts can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="    return FontResourcesParserCompat.readCerts(resources, certificatesRes)"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/googlefonts/FontProviderHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontsContractCompat.requestFont can only be called from within the same library (androidx.core:core)"
+        errorLine1="        FontsContractCompat.requestFont("
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/compose/ui/text/googlefonts/GoogleFont.kt"/>
+    </issue>
+
+</issues>
diff --git a/compose/ui/ui-text/api/current.ignore b/compose/ui/ui-text/api/current.ignore
index b615cf0..fe35567 100644
--- a/compose/ui/ui-text/api/current.ignore
+++ b/compose/ui/ui-text/api/current.ignore
@@ -9,9 +9,3 @@
     Attempted to change parameter name from fallbackDensity to defaultDensity in constructor androidx.compose.ui.text.TextMeasurer
 ParameterNameChange: androidx.compose.ui.text.TextMeasurer#TextMeasurer(androidx.compose.ui.text.font.FontFamily.Resolver, androidx.compose.ui.unit.Density, androidx.compose.ui.unit.LayoutDirection, int) parameter #2:
     Attempted to change parameter name from fallbackLayoutDirection to defaultLayoutDirection in constructor androidx.compose.ui.text.TextMeasurer
-
-
-RemovedMethod: androidx.compose.ui.text.input.ImeOptions#ImeOptions(boolean, int, boolean, int, int):
-    Removed constructor androidx.compose.ui.text.input.ImeOptions(boolean,int,boolean,int,int)
-RemovedMethod: androidx.compose.ui.text.input.ImeOptions#copy(boolean, int, boolean, int, int):
-    Removed method androidx.compose.ui.text.input.ImeOptions.copy(boolean,int,boolean,int,int)
diff --git a/compose/ui/ui-text/api/current.txt b/compose/ui/ui-text/api/current.txt
index 7e15d2d..34c92ba 100644
--- a/compose/ui/ui-text/api/current.txt
+++ b/compose/ui/ui-text/api/current.txt
@@ -637,6 +637,12 @@
   @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
 
+  @SuppressCompatibility @androidx.compose.ui.text.android.InternalPlatformTextApi public final class StaticLayoutFactory {
+    method public android.text.StaticLayout create(CharSequence text, android.text.TextPaint paint, int width, optional int start, optional int end, optional android.text.TextDirectionHeuristic textDir, optional android.text.Layout.Alignment alignment, optional @IntRange(from=0L) int maxLines, optional android.text.TextUtils.TruncateAt? ellipsize, optional @IntRange(from=0L) int ellipsizedWidth, optional @FloatRange(from=0.0) float lineSpacingMultiplier, optional float lineSpacingExtra, optional int justificationMode, optional boolean includePadding, optional boolean useFallbackLineSpacing, optional int breakStrategy, optional int lineBreakStyle, optional int lineBreakWordStyle, optional int hyphenationFrequency, optional int[]? leftIndents, optional int[]? rightIndents);
+    method public boolean isFallbackLineSpacingEnabled(android.text.StaticLayout layout, boolean useFallbackLineSpacing);
+    field public static final androidx.compose.ui.text.android.StaticLayoutFactory INSTANCE;
+  }
+
 }
 
 package androidx.compose.ui.text.font {
@@ -738,6 +744,7 @@
   public final class FontFamilyResolver_androidKt {
     method public static androidx.compose.ui.text.font.FontFamily.Resolver createFontFamilyResolver(android.content.Context context);
     method public static androidx.compose.ui.text.font.FontFamily.Resolver createFontFamilyResolver(android.content.Context context, kotlin.coroutines.CoroutineContext coroutineContext);
+    method @SuppressCompatibility @androidx.compose.ui.text.InternalTextApi public static androidx.compose.ui.text.font.FontFamily.Resolver emptyCacheFontFamilyResolver(android.content.Context context);
     method public static androidx.compose.runtime.State<android.graphics.Typeface> resolveAsTypeface(androidx.compose.ui.text.font.FontFamily.Resolver, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight fontWeight, optional int fontStyle, optional int fontSynthesis);
   }
 
@@ -1088,6 +1095,20 @@
     property public final androidx.compose.ui.text.input.OffsetMapping Identity;
   }
 
+  @SuppressCompatibility @androidx.compose.ui.text.InternalTextApi public final class PartialGapBuffer {
+    ctor public PartialGapBuffer(String text);
+    method public operator char get(int index);
+    method public int getLength();
+    method public String getText();
+    method public void replace(int start, int end, String text);
+    method public void setText(String);
+    property public final int length;
+    property public final String text;
+    field public static final int BUF_SIZE = 255; // 0xff
+    field public static final int NOWHERE = -1; // 0xffffffff
+    field public static final int SURROUNDING_SIZE = 64; // 0x40
+  }
+
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
     ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
diff --git a/compose/ui/ui-text/api/restricted_current.ignore b/compose/ui/ui-text/api/restricted_current.ignore
index b615cf0..fe35567 100644
--- a/compose/ui/ui-text/api/restricted_current.ignore
+++ b/compose/ui/ui-text/api/restricted_current.ignore
@@ -9,9 +9,3 @@
     Attempted to change parameter name from fallbackDensity to defaultDensity in constructor androidx.compose.ui.text.TextMeasurer
 ParameterNameChange: androidx.compose.ui.text.TextMeasurer#TextMeasurer(androidx.compose.ui.text.font.FontFamily.Resolver, androidx.compose.ui.unit.Density, androidx.compose.ui.unit.LayoutDirection, int) parameter #2:
     Attempted to change parameter name from fallbackLayoutDirection to defaultLayoutDirection in constructor androidx.compose.ui.text.TextMeasurer
-
-
-RemovedMethod: androidx.compose.ui.text.input.ImeOptions#ImeOptions(boolean, int, boolean, int, int):
-    Removed constructor androidx.compose.ui.text.input.ImeOptions(boolean,int,boolean,int,int)
-RemovedMethod: androidx.compose.ui.text.input.ImeOptions#copy(boolean, int, boolean, int, int):
-    Removed method androidx.compose.ui.text.input.ImeOptions.copy(boolean,int,boolean,int,int)
diff --git a/compose/ui/ui-text/api/restricted_current.txt b/compose/ui/ui-text/api/restricted_current.txt
index 7e15d2d..34c92ba 100644
--- a/compose/ui/ui-text/api/restricted_current.txt
+++ b/compose/ui/ui-text/api/restricted_current.txt
@@ -637,6 +637,12 @@
   @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
 
+  @SuppressCompatibility @androidx.compose.ui.text.android.InternalPlatformTextApi public final class StaticLayoutFactory {
+    method public android.text.StaticLayout create(CharSequence text, android.text.TextPaint paint, int width, optional int start, optional int end, optional android.text.TextDirectionHeuristic textDir, optional android.text.Layout.Alignment alignment, optional @IntRange(from=0L) int maxLines, optional android.text.TextUtils.TruncateAt? ellipsize, optional @IntRange(from=0L) int ellipsizedWidth, optional @FloatRange(from=0.0) float lineSpacingMultiplier, optional float lineSpacingExtra, optional int justificationMode, optional boolean includePadding, optional boolean useFallbackLineSpacing, optional int breakStrategy, optional int lineBreakStyle, optional int lineBreakWordStyle, optional int hyphenationFrequency, optional int[]? leftIndents, optional int[]? rightIndents);
+    method public boolean isFallbackLineSpacingEnabled(android.text.StaticLayout layout, boolean useFallbackLineSpacing);
+    field public static final androidx.compose.ui.text.android.StaticLayoutFactory INSTANCE;
+  }
+
 }
 
 package androidx.compose.ui.text.font {
@@ -738,6 +744,7 @@
   public final class FontFamilyResolver_androidKt {
     method public static androidx.compose.ui.text.font.FontFamily.Resolver createFontFamilyResolver(android.content.Context context);
     method public static androidx.compose.ui.text.font.FontFamily.Resolver createFontFamilyResolver(android.content.Context context, kotlin.coroutines.CoroutineContext coroutineContext);
+    method @SuppressCompatibility @androidx.compose.ui.text.InternalTextApi public static androidx.compose.ui.text.font.FontFamily.Resolver emptyCacheFontFamilyResolver(android.content.Context context);
     method public static androidx.compose.runtime.State<android.graphics.Typeface> resolveAsTypeface(androidx.compose.ui.text.font.FontFamily.Resolver, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight fontWeight, optional int fontStyle, optional int fontSynthesis);
   }
 
@@ -1088,6 +1095,20 @@
     property public final androidx.compose.ui.text.input.OffsetMapping Identity;
   }
 
+  @SuppressCompatibility @androidx.compose.ui.text.InternalTextApi public final class PartialGapBuffer {
+    ctor public PartialGapBuffer(String text);
+    method public operator char get(int index);
+    method public int getLength();
+    method public String getText();
+    method public void replace(int start, int end, String text);
+    method public void setText(String);
+    property public final int length;
+    property public final String text;
+    field public static final int BUF_SIZE = 255; // 0xff
+    field public static final int NOWHERE = -1; // 0xffffffff
+    field public static final int SURROUNDING_SIZE = 64; // 0x40
+  }
+
   public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
     ctor public PasswordVisualTransformation(optional char mask);
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
diff --git a/compose/ui/ui-text/lint-baseline.xml b/compose/ui/ui-text/lint-baseline.xml
index 240a988..f49a0ce 100644
--- a/compose/ui/ui-text/lint-baseline.xml
+++ b/compose/ui/ui-text/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanInlineOptIn"
@@ -29,222 +29,6 @@
     </issue>
 
     <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal open class BaselineShiftSpan(val multiplier: Float) : MetricAffectingSpan() {"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="fun emptyCacheFontFamilyResolver(context: Context): FontFamily.Resolver {"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.android.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class FontFeatureSpan(val fontFeatureSettings: String) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="class PartialGapBuffer(var text: String) {"
-        errorLine2="      ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class IndentationFixSpan : LeadingMarginSpan {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal object LayoutCompat {"
-        errorLine2="                ~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal fun Layout.getLineForOffset(@IntRange(from = 0) offset: Int, upstream: Boolean): Int {"
-        errorLine2="                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LayoutHelper(val layout: Layout) {"
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LayoutIntrinsics("
-        errorLine2="               ~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LetterSpacingSpanEm(val letterSpacing: Float) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LetterSpacingSpanPx(@Px val letterSpacing: Float) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LineHeightSpan("
-        errorLine2="               ~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LineHeightStyleSpan("
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class PlaceholderSpan("
-        errorLine2="               ~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal data class Segment("
-        errorLine2="                    ~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal object SegmentBreaker {"
-        errorLine2="                ~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="enum class SegmentType {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class ShadowSpan("
-        errorLine2="               ~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal open class SkewXSpan(val skewX: Float) : MetricAffectingSpan() {"
-        errorLine2="                    ~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="object StaticLayoutFactory {"
-        errorLine2="       ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class TextDecorationSpan("
-        errorLine2="               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class TextLayout constructor("
-        errorLine2="               ~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class TypefaceSpan(val typeface: Typeface) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class WordBoundary("
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="../../../text/text/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt"/>
-    </issue>
-
-    <issue
         id="ListIterator"
         message="Creating an unnecessary Iterator to iterate through a List"
         errorLine1="                        &quot;&apos;$key&apos; must be unique. Actual [ [${value.joinToString()}]&quot;"
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.android.kt
index 76cef40..1bfd354 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/font/FontFamilyResolver.android.kt
@@ -86,7 +86,6 @@
  *
  * This is primarily useful for testing or benchmarking.
  *
- * @suppress
  */
 @InternalTextApi // exposed for benchmarking, not a stable API.
 fun emptyCacheFontFamilyResolver(context: Context): FontFamily.Resolver {
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt
index 6b2f303..c211d6f 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt
@@ -225,7 +225,6 @@
  * is requested, this class flush the buffer and create new String, then start new gap buffer.
  *
  * @param text The initial text
- * @suppress
  */
 @InternalTextApi // "Used by benchmarks"
 class PartialGapBuffer(var text: String) {
diff --git a/compose/ui/ui/lint-baseline.xml b/compose/ui/ui/lint-baseline.xml
index f5406d2..a5c5fb7 100644
--- a/compose/ui/ui/lint-baseline.xml
+++ b/compose/ui/ui/lint-baseline.xml
@@ -65,6 +65,303 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.obtainAttributes can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="        val typedArray = TypedArrayUtils.obtainAttributes("
+        errorLine2="                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.obtainAttributes can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            res,"
+        errorLine2="            ~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.obtainAttributes can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            theme,"
+        errorLine2="            ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.obtainAttributes can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            set,"
+        errorLine2="            ~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.obtainAttributes can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            attrs"
+        errorLine2="            ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedInt can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            val result = TypedArrayUtils.getNamedInt("
+        errorLine2="                                         ~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedInt can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                this,"
+        errorLine2="                ~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedInt can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                xmlParser,"
+        errorLine2="                ~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedInt can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                attrName,"
+        errorLine2="                ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedInt can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                resId,"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedFloat can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            val result = TypedArrayUtils.getNamedFloat("
+        errorLine2="                                         ~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedFloat can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                this,"
+        errorLine2="                ~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedFloat can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                xmlParser,"
+        errorLine2="                ~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedFloat can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                attrName,"
+        errorLine2="                ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedFloat can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                resId,"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedBoolean can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            val result = TypedArrayUtils.getNamedBoolean("
+        errorLine2="                                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedBoolean can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                this,"
+        errorLine2="                ~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedBoolean can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                xmlParser,"
+        errorLine2="                ~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedBoolean can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                attrName,"
+        errorLine2="                ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedBoolean can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                resId,"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedComplexColor can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            val result = TypedArrayUtils.getNamedComplexColor("
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedComplexColor can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                this,"
+        errorLine2="                ~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedComplexColor can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                xmlParser,"
+        errorLine2="                ~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedComplexColor can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                theme,"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedComplexColor can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                attrName,"
+        errorLine2="                ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedComplexColor can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                resId, defaultValue"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedComplexColor can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                resId, defaultValue"
+        errorLine2="                       ~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedColorStateList can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="            val result = TypedArrayUtils.getNamedColorStateList("
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedColorStateList can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                typedArray,"
+        errorLine2="                ~~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedColorStateList can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                xmlParser,"
+        errorLine2="                ~~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedColorStateList can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                theme,"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedColorStateList can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                attrName,"
+        errorLine2="                ~~~~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TypedArrayUtils.getNamedColorStateList can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.compose.ui`)"
+        errorLine1="                resId"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.android.kt"/>
+    </issue>
+
+    <issue
         id="PrimitiveInLambda"
         message="Use a functional interface instead of lambda syntax for lambdas with primitive values in constructor AlignmentLine has parameter &apos;merger&apos; with type Function2&lt;? super Integer, ? super Integer, Integer>."
         errorLine1="    internal val merger: (Int, Int) -> Int"
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
index ff065d1..3a813aa 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
@@ -35,7 +35,6 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
@@ -175,50 +174,6 @@
         }
     }
 
-    @Test
-    fun testVectorSkipsRecompositionOnNoChange() {
-        val state = mutableIntStateOf(0)
-        var composeCount = 0
-        var vectorComposeCount = 0
-
-        val composeVector: @Composable @VectorComposable (Float, Float) -> Unit = {
-                viewportWidth, viewportHeight ->
-
-            vectorComposeCount++
-            Path(
-                fill = SolidColor(Color.Blue),
-                pathData = PathData {
-                    lineTo(viewportWidth, 0f)
-                    lineTo(viewportWidth, viewportHeight)
-                    lineTo(0f, viewportHeight)
-                    close()
-                }
-            )
-        }
-
-        rule.setContent {
-            composeCount++
-            // Arbitrary read to force composition here and verify the subcomposition below skips
-            state.value
-            val vectorPainter = rememberVectorPainter(
-                defaultWidth = 10.dp,
-                defaultHeight = 10.dp,
-                autoMirror = false,
-                content = composeVector
-            )
-            Image(
-                vectorPainter,
-                null,
-                modifier = Modifier.size(20.dp)
-            )
-        }
-
-        state.value = 1
-        rule.waitForIdle()
-        assertEquals(2, composeCount) // Arbitrary state read should compose twice
-        assertEquals(1, vectorComposeCount) // Vector is identical so should compose once
-    }
-
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
     @Test
     fun testVectorInvalidation() {
@@ -1103,7 +1058,6 @@
         var vectorInCache = false
         rule.setContent {
             val theme = LocalContext.current.theme
-            val density = LocalDensity.current
             val imageVectorCache = LocalImageVectorCache.current
             imageVectorCache.clear()
             Image(
@@ -1111,21 +1065,8 @@
                 contentDescription = null
             )
 
-            val key = ImageVectorCache.Key(theme, R.drawable.ic_triangle, density)
-            vectorInCache = imageVectorCache[key] != null
-        }
-
-        assertTrue(vectorInCache)
-    }
-
-    @Test
-    fun testVectorPainterCacheHit() {
-        var vectorInCache = false
-        rule.setContent {
-            // obtaining the same painter resource should return the same instance
-            val painter1 = painterResource(R.drawable.ic_triangle)
-            val painter2 = painterResource(R.drawable.ic_triangle)
-            vectorInCache = painter1 === painter2
+            vectorInCache =
+                imageVectorCache[ImageVectorCache.Key(theme, R.drawable.ic_triangle)] != null
         }
 
         assertTrue(vectorInCache)
@@ -1137,10 +1078,8 @@
         var application: Application? = null
         var theme: Resources.Theme? = null
         var vectorCache: ImageVectorCache? = null
-        var density: Density? = null
         rule.setContent {
             application = LocalContext.current.applicationContext as Application
-            density = LocalDensity.current
             theme = LocalContext.current.theme
             val imageVectorCache = LocalImageVectorCache.current
             imageVectorCache.clear()
@@ -1149,8 +1088,8 @@
                 contentDescription = null
             )
 
-            val key = ImageVectorCache.Key(theme!!, R.drawable.ic_triangle, density!!)
-            vectorInCache = imageVectorCache[key] != null
+            vectorInCache =
+                imageVectorCache[ImageVectorCache.Key(theme!!, R.drawable.ic_triangle)] != null
 
             vectorCache = imageVectorCache
         }
@@ -1158,7 +1097,7 @@
         application?.onTrimMemory(0)
 
         val cacheCleared = vectorCache?.let {
-            it[ImageVectorCache.Key(theme!!, R.drawable.ic_triangle, density!!)] == null
+            it[ImageVectorCache.Key(theme!!, R.drawable.ic_triangle)] == null
         } ?: false
 
         assertTrue("Vector was not inserted in cache after initial creation", vectorInCache)
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
index c2b3768..31db4be 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilterTest.kt
@@ -18,8 +18,11 @@
 
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ReusableContent
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
@@ -858,4 +861,45 @@
         }
         assertThat(events).hasSize(2)
     }
+
+    @Test
+    @MediumTest
+    fun lambdaIsRecapturedWhenReused() {
+        val tag = "box"
+        val events = mutableListOf<Int>()
+
+        @Composable
+        fun BoxWithKey(key: Int) {
+            // imitating one of the recommended patterns for Modifier.pointerInput() where we use
+            // rememberUpdatedState in order to have the latest value inside the suspending lambda.
+            // technically the state backing rememberUpdatedState will be recreated when the reuse
+            // happens so Modifier.pointerInput() have to update it's lambda to the new one even
+            // given that the key (Unit) didn't change.
+            val currentKey by rememberUpdatedState(key)
+            Box(
+                Modifier
+                    .testTag(tag)
+                    .fillMaxSize()
+                    .pointerInput(Unit) {
+                        events.add(currentKey)
+                    })
+        }
+
+        var key by mutableStateOf(0)
+
+        rule.setContent {
+            ReusableContent(key = key) {
+                BoxWithKey(key)
+            }
+        }
+
+        rule.runOnIdle {
+            key++
+        }
+
+        rule.onNodeWithTag(tag).performTouchInput {
+            down(Offset.Zero)
+        }
+        assertThat(events).isEqualTo(listOf(key))
+    }
 }
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/SubcomposeLayoutTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/SubcomposeLayoutTest.kt
index 205b312..44ae78e 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/SubcomposeLayoutTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/SubcomposeLayoutTest.kt
@@ -2382,7 +2382,10 @@
                 val content = if (showContent) {
                     subcompose(0) {
                         Box {
-                            AndroidView(::View, Modifier.fillMaxSize().testTag("AndroidView"))
+                            AndroidView(::View,
+                                Modifier
+                                    .fillMaxSize()
+                                    .testTag("AndroidView"))
                         }
                     }
                 } else emptyList()
@@ -2495,7 +2498,9 @@
                         Box {
                             SubcomposeLayout { constraints ->
                                 val placeable = measure(Unit, constraints) {
-                                    Box(modifier = Modifier.size(10.dp).then(measureCountModifier))
+                                    Box(modifier = Modifier
+                                        .size(10.dp)
+                                        .then(measureCountModifier))
 
                                     DisposableEffect(Unit) {
                                         val capturedSlotId = slotId
@@ -2539,6 +2544,42 @@
         }
     }
 
+    @Test
+    fun slotIsProperlyDeactivatedAfterUpdatingReusePolicy() {
+        var state by mutableStateOf(SubcomposeLayoutState(SubcomposeSlotReusePolicy(1)))
+        var shouldCompose by mutableStateOf(true)
+        var disposed = false
+        rule.setContent {
+            SubcomposeLayout(state) { constraints ->
+                val placeables = if (shouldCompose) {
+                    subcompose(Unit) {
+                        DisposableEffect(Unit) {
+                            onDispose {
+                                disposed = true
+                            }
+                        }
+                    }.map {
+                        it.measure(constraints)
+                    }
+                } else {
+                    emptyList()
+                }
+                layout(100, 100) {
+                    placeables.forEach { it.place(0, 0) }
+                }
+            }
+        }
+
+        rule.runOnIdle {
+            state = SubcomposeLayoutState(SubcomposeSlotReusePolicy(1))
+            shouldCompose = false
+        }
+
+        rule.runOnIdle {
+            assertThat(disposed).isTrue()
+        }
+    }
+
     private fun SubcomposeMeasureScope.measure(
         slotId: Any,
         constraints: Constraints,
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/PainterResources.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/PainterResources.android.kt
index bbde12e..32dcbe67 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/PainterResources.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/PainterResources.android.kt
@@ -26,13 +26,12 @@
 import androidx.compose.ui.graphics.nativeCanvas
 import androidx.compose.ui.graphics.painter.BitmapPainter
 import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.graphics.vector.VectorPainter
 import androidx.compose.ui.graphics.vector.compat.seekToStartTag
-import androidx.compose.ui.graphics.vector.createVectorPainterFromImageVector
+import androidx.compose.ui.graphics.vector.rememberVectorPainter
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalImageVectorCache
-import androidx.compose.ui.res.ImageVectorCache.ImageVectorEntry
 
 /**
  * Create a [Painter] from an Android resource id. This can load either an instance of
@@ -63,7 +62,8 @@
     val path = value.string
     // Assume .xml suffix implies loading a VectorDrawable resource
     return if (path?.endsWith(".xml") == true) {
-        obtainVectorPainter(context.theme, res, id, value.changingConfigurations)
+        val imageVector = loadVectorResource(context.theme, res, id, value.changingConfigurations)
+        rememberVectorPainter(imageVector)
     } else {
         // Otherwise load the bitmap resource
         val imageBitmap = remember(path, id, context.theme) {
@@ -74,38 +74,29 @@
 }
 
 /**
- * Helper method to load the previously cached VectorPainter instance if it exists, otherwise
- * this parses the xml into an ImageVector and creates a new VectorPainter inserting it into the
- * cache for reuse
+ * Helper method to validate that the xml resource is a vector drawable then load
+ * the ImageVector. Because this throws exceptions we cannot have this implementation as part of
+ * the composable implementation it is invoked in.
  */
 @Composable
-private fun obtainVectorPainter(
+private fun loadVectorResource(
     theme: Resources.Theme,
     res: Resources,
     id: Int,
     changingConfigurations: Int
-): VectorPainter {
+): ImageVector {
     val imageVectorCache = LocalImageVectorCache.current
-    val density = LocalDensity.current
-    val key = remember(theme, id, density) {
-        ImageVectorCache.Key(theme, id, density)
-    }
-    val imageVectorEntry = imageVectorCache[key]
-    var vectorPainter = imageVectorEntry?.vectorPainter
-
-    if (vectorPainter == null) {
+    val key = ImageVectorCache.Key(theme, id)
+    var imageVectorEntry = imageVectorCache[key]
+    if (imageVectorEntry == null) {
         @Suppress("ResourceType") val parser = res.getXml(id)
         if (parser.seekToStartTag().name != "vector") {
             throw IllegalArgumentException(errorMessage)
         }
-        var imageVector = imageVectorEntry?.imageVector
-        if (imageVector == null) {
-            imageVector = loadVectorResourceInner(theme, res, parser)
-        }
-        vectorPainter = createVectorPainterFromImageVector(density, imageVector)
-        imageVectorCache[key] = ImageVectorEntry(imageVector, changingConfigurations, vectorPainter)
+        imageVectorEntry = loadVectorResourceInner(theme, res, parser, changingConfigurations)
+        imageVectorCache[key] = imageVectorEntry
     }
-    return vectorPainter
+    return imageVectorEntry.imageVector
 }
 
 /**
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt
index 0b45ba3..eeb02ee 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/res/VectorResources.android.kt
@@ -25,16 +25,12 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
 import androidx.compose.ui.graphics.vector.ImageVector
-import androidx.compose.ui.graphics.vector.VectorPainter
 import androidx.compose.ui.graphics.vector.compat.AndroidVectorParser
 import androidx.compose.ui.graphics.vector.compat.createVectorImageBuilder
 import androidx.compose.ui.graphics.vector.compat.isAtEnd
 import androidx.compose.ui.graphics.vector.compat.parseCurrentVectorNode
 import androidx.compose.ui.graphics.vector.compat.seekToStartTag
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.platform.LocalImageVectorCache
-import androidx.compose.ui.unit.Density
 import java.lang.ref.WeakReference
 import org.xmlpull.v1.XmlPullParserException
 
@@ -50,26 +46,13 @@
  */
 @Composable
 fun ImageVector.Companion.vectorResource(@DrawableRes id: Int): ImageVector {
-    val imageCache = LocalImageVectorCache.current
     val context = LocalContext.current
-    val density = LocalDensity.current
     val res = resources()
     val theme = context.theme
-    val key = remember(theme, id, density) {
-        ImageVectorCache.Key(theme, id, density)
+
+    return remember(id, res, theme, res.configuration) {
+        vectorResource(theme, res, id)
     }
-    var imageVector = imageCache[key]?.imageVector
-    if (imageVector == null) {
-        val value = remember { TypedValue() }
-        res.getValue(id, value, true)
-        imageVector = vectorResource(theme, res, id)
-        imageCache[key] = ImageVectorCache.ImageVectorEntry(
-            imageVector,
-            value.changingConfigurations,
-            null
-        )
-    }
-    return imageVector
 }
 
 @Throws(XmlPullParserException::class)
@@ -78,11 +61,15 @@
     res: Resources,
     resId: Int
 ): ImageVector {
+    val value = TypedValue()
+    res.getValue(resId, value, true)
+
     return loadVectorResourceInner(
         theme,
         res,
         res.getXml(resId).apply { seekToStartTag() },
-    )
+        value.changingConfigurations
+    ).imageVector
 }
 
 /**
@@ -94,8 +81,9 @@
 internal fun loadVectorResourceInner(
     theme: Resources.Theme? = null,
     res: Resources,
-    parser: XmlResourceParser
-): ImageVector {
+    parser: XmlResourceParser,
+    changingConfigurations: Int
+): ImageVectorCache.ImageVectorEntry {
     val attrs = Xml.asAttributeSet(parser)
     val resourceParser = AndroidVectorParser(parser)
     val builder = resourceParser.createVectorImageBuilder(res, theme, attrs)
@@ -111,7 +99,7 @@
         )
         parser.next()
     }
-    return builder.build()
+    return ImageVectorCache.ImageVectorEntry(builder.build(), changingConfigurations)
 }
 
 /**
@@ -125,8 +113,7 @@
      */
     data class Key(
         val theme: Resources.Theme,
-        val id: Int,
-        val density: Density
+        val id: Int
     )
 
     /**
@@ -136,8 +123,7 @@
      */
     data class ImageVectorEntry(
         val imageVector: ImageVector,
-        val configFlags: Int,
-        val vectorPainter: VectorPainter?,
+        val configFlags: Int
     )
 
     private val map = HashMap<Key, WeakReference<ImageVectorEntry>>()
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
index 2aed0c9..972e0ae 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
@@ -19,7 +19,6 @@
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.setValue
-import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.geometry.Size.Companion.Unspecified
 import androidx.compose.ui.graphics.BlendMode
@@ -37,7 +36,6 @@
 import androidx.compose.ui.graphics.StrokeJoin
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.graphics.drawscope.Stroke
-import androidx.compose.ui.graphics.drawscope.scale
 import androidx.compose.ui.graphics.drawscope.withTransform
 import androidx.compose.ui.graphics.isSpecified
 import androidx.compose.ui.graphics.isUnspecified
@@ -96,12 +94,18 @@
 
 internal class VectorComponent : VNode() {
     val root = GroupComponent().apply {
+        pivotX = 0.0f
+        pivotY = 0.0f
         invalidateListener = {
             doInvalidate()
         }
     }
 
-    var name: String = DefaultGroupName
+    var name: String
+        get() = root.name
+        set(value) {
+            root.name = value
+        }
 
     private fun doInvalidate() {
         isDirty = true
@@ -127,18 +131,11 @@
 
     private var previousDrawSize = Unspecified
 
-    private var rootScaleX = 1f
-    private var rootScaleY = 1f
-
     /**
      * Cached lambda used to avoid allocating the lambda on each draw invocation
      */
     private val drawVectorBlock: DrawScope.() -> Unit = {
-        with(root) {
-            scale(rootScaleX, rootScaleY, pivot = Offset.Zero) {
-                draw()
-            }
-        }
+        with(root) { draw() }
     }
 
     fun DrawScope.draw(alpha: Float, colorFilter: ColorFilter?) {
@@ -158,8 +155,8 @@
             } else {
                 null
             }
-            rootScaleX = size.width / viewportSize.width
-            rootScaleY = size.height / viewportSize.height
+            root.scaleX = size.width / viewportSize.width
+            root.scaleY = size.height / viewportSize.height
             cacheDrawScope.drawCachedImage(
                 targetImageConfig,
                 IntSize(ceil(size.width).toInt(), ceil(size.height).toInt()),
@@ -269,23 +266,29 @@
 
     var trimPathStart = DefaultTrimPathStart
         set(value) {
-            field = value
-            isTrimPathDirty = true
-            invalidate()
+            if (field != value) {
+                field = value
+                isTrimPathDirty = true
+                invalidate()
+            }
         }
 
     var trimPathEnd = DefaultTrimPathEnd
         set(value) {
-            field = value
-            isTrimPathDirty = true
-            invalidate()
+            if (field != value) {
+                field = value
+                isTrimPathDirty = true
+                invalidate()
+            }
         }
 
     var trimPathOffset = DefaultTrimPathOffset
         set(value) {
-            field = value
-            isTrimPathDirty = true
-            invalidate()
+            if (field != value) {
+                field = value
+                isTrimPathDirty = true
+                invalidate()
+            }
         }
 
     private var isPathDirty = true
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
index 7078e890..35225ac 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
@@ -19,6 +19,8 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.ComposableOpenTarget
 import androidx.compose.runtime.Composition
+import androidx.compose.runtime.CompositionContext
+import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableStateOf
@@ -33,11 +35,9 @@
 import androidx.compose.ui.graphics.ImageBitmapConfig
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.graphics.drawscope.scale
-import androidx.compose.ui.graphics.isSpecified
 import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.internal.JvmDefaultWithCompatibility
 import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.LayoutDirection
 
@@ -127,36 +127,27 @@
     content: @Composable @VectorComposable (viewportWidth: Float, viewportHeight: Float) -> Unit
 ): VectorPainter {
     val density = LocalDensity.current
-    val defaultSize = density.obtainSizePx(defaultWidth, defaultHeight)
-    val viewport = obtainViewportSize(defaultSize, viewportWidth, viewportHeight)
+    val widthPx = with(density) { defaultWidth.toPx() }
+    val heightPx = with(density) { defaultHeight.toPx() }
+
+    val vpWidth = if (viewportWidth.isNaN()) widthPx else viewportWidth
+    val vpHeight = if (viewportHeight.isNaN()) heightPx else viewportHeight
+
     val intrinsicColorFilter = remember(tintColor, tintBlendMode) {
-        createColorFilter(tintColor, tintBlendMode)
-    }
-    return remember { VectorPainter() }.apply {
-        configureVectorPainter(
-            defaultSize = defaultSize,
-            viewportSize = viewport,
-            name = name,
-            intrinsicColorFilter = intrinsicColorFilter,
-            autoMirror = autoMirror
-        )
-        val compositionContext = rememberCompositionContext()
-        this.composition = remember(viewportWidth, viewportHeight, content) {
-            val curComp = this.composition
-            val next = if (curComp == null || curComp.isDisposed) {
-                Composition(
-                    VectorApplier(this.vector.root),
-                    compositionContext
-                )
-            } else {
-                curComp
-            }
-            next.setContent {
-                content(viewport.width, viewport.height)
-            }
-            next
+        if (tintColor != Color.Unspecified) {
+            ColorFilter.tint(tintColor, tintBlendMode)
+        } else {
+            null
         }
     }
+
+    return remember { VectorPainter() }.apply {
+        // These assignments are thread safe as parameters are backed by a mutableState object
+        size = Size(widthPx, heightPx)
+        this.autoMirror = autoMirror
+        this.intrinsicColorFilter = intrinsicColorFilter
+        RenderVector(name, vpWidth, vpHeight, content)
+    }
 }
 
 /**
@@ -199,19 +190,7 @@
             vector.intrinsicColorFilter = value
         }
 
-    internal var viewportSize: Size
-        get() = vector.viewportSize
-        set(value) {
-            vector.viewportSize = value
-        }
-
-    internal var name: String
-        get() = vector.name
-        set(value) {
-            vector.name = value
-        }
-
-    internal val vector = VectorComponent().apply {
+    private val vector = VectorComponent().apply {
         invalidateCallback = {
             if (drawCount == invalidateCount) {
                 invalidateCount++
@@ -222,11 +201,56 @@
     internal val bitmapConfig: ImageBitmapConfig
         get() = vector.cacheBitmapConfig
 
-    internal var composition: Composition? = null
+    private var composition: Composition? = null
+
+    @Suppress("PrimitiveInLambda")
+    private fun composeVector(
+        parent: CompositionContext,
+        composable: @Composable (viewportWidth: Float, viewportHeight: Float) -> Unit
+    ): Composition {
+        val existing = composition
+        val next = if (existing == null || existing.isDisposed) {
+            Composition(
+                VectorApplier(vector.root),
+                parent
+            )
+        } else {
+            existing
+        }
+        composition = next
+        next.setContent {
+            composable(vector.viewportSize.width, vector.viewportSize.height)
+        }
+        return next
+    }
 
     // TODO replace with mutableStateOf(Unit, neverEqualPolicy()) after b/291647821 is addressed
     private var invalidateCount by mutableIntStateOf(0)
 
+    @Suppress("PrimitiveInLambda")
+    @Composable
+    internal fun RenderVector(
+        name: String,
+        viewportWidth: Float,
+        viewportHeight: Float,
+        content: @Composable (viewportWidth: Float, viewportHeight: Float) -> Unit
+    ) {
+        vector.apply {
+            this.name = name
+            this.viewportSize = Size(viewportWidth, viewportHeight)
+        }
+        val composition = composeVector(
+            rememberCompositionContext(),
+            content
+        )
+
+        DisposableEffect(composition) {
+            onDispose {
+                composition.dispose()
+            }
+        }
+    }
+
     private var currentAlpha: Float = 1.0f
     private var currentColorFilter: ColorFilter? = null
 
@@ -302,118 +326,6 @@
     }
 }
 
-private fun Density.obtainSizePx(defaultWidth: Dp, defaultHeight: Dp) =
-        Size(defaultWidth.toPx(), defaultHeight.toPx())
-
-/**
- * Helper method to calculate the viewport size. If the viewport width/height are not specified
- * this falls back on the default size provided
- */
-private fun obtainViewportSize(
-    defaultSize: Size,
-    viewportWidth: Float,
-    viewportHeight: Float
-) = Size(
-        if (viewportWidth.isNaN()) defaultSize.width else viewportWidth,
-        if (viewportHeight.isNaN()) defaultSize.height else viewportHeight
-    )
-
-/**
- * Helper method to conditionally create a ColorFilter to tint contents if [tintColor] is
- * specified, that is [Color.isSpecified] returns true
- */
-private fun createColorFilter(tintColor: Color, tintBlendMode: BlendMode): ColorFilter? =
-    if (tintColor.isSpecified) {
-        ColorFilter.tint(tintColor, tintBlendMode)
-    } else {
-        null
-    }
-
-/**
- * Helper method to configure the properties of a VectorPainter that maybe re-used
- */
-internal fun VectorPainter.configureVectorPainter(
-    defaultSize: Size,
-    viewportSize: Size,
-    name: String = RootGroupName,
-    intrinsicColorFilter: ColorFilter?,
-    autoMirror: Boolean = false,
-): VectorPainter = apply {
-        this.size = defaultSize
-        this.autoMirror = autoMirror
-        this.intrinsicColorFilter = intrinsicColorFilter
-        this.viewportSize = viewportSize
-        this.name = name
-    }
-
-/**
- * Helper method to create a VectorPainter instance from an ImageVector
- */
-internal fun createVectorPainterFromImageVector(
-    density: Density,
-    imageVector: ImageVector
-): VectorPainter {
-    val defaultSize = density.obtainSizePx(imageVector.defaultWidth, imageVector.defaultHeight)
-    val viewport = obtainViewportSize(
-        defaultSize,
-        imageVector.viewportWidth,
-        imageVector.viewportHeight
-    )
-    return VectorPainter().configureVectorPainter(
-        defaultSize = defaultSize,
-        viewportSize = viewport,
-        name = imageVector.name,
-        intrinsicColorFilter = createColorFilter(imageVector.tintColor, imageVector.tintBlendMode),
-        autoMirror = imageVector.autoMirror
-    ).apply {
-        this.vector.root.createGroupComponent(imageVector.root)
-    }
-}
-
-/**
- * statically create a a GroupComponent from the VectorGroup representation provided from
- * an [ImageVector] instance
- */
-internal fun GroupComponent.createGroupComponent(currentGroup: VectorGroup): GroupComponent {
-    for (index in 0 until currentGroup.size) {
-        val vectorNode = currentGroup[index]
-        if (vectorNode is VectorPath) {
-            val pathComponent = PathComponent().apply {
-                pathData = vectorNode.pathData
-                pathFillType = vectorNode.pathFillType
-                name = vectorNode.name
-                fill = vectorNode.fill
-                fillAlpha = vectorNode.fillAlpha
-                stroke = vectorNode.stroke
-                strokeAlpha = vectorNode.strokeAlpha
-                strokeLineWidth = vectorNode.strokeLineWidth
-                strokeLineCap = vectorNode.strokeLineCap
-                strokeLineJoin = vectorNode.strokeLineJoin
-                strokeLineMiter = vectorNode.strokeLineMiter
-                trimPathStart = vectorNode.trimPathStart
-                trimPathEnd = vectorNode.trimPathEnd
-                trimPathOffset = vectorNode.trimPathOffset
-            }
-            insertAt(index, pathComponent)
-        } else if (vectorNode is VectorGroup) {
-            val groupComponent = GroupComponent().apply {
-                name = vectorNode.name
-                rotation = vectorNode.rotation
-                scaleX = vectorNode.scaleX
-                scaleY = vectorNode.scaleY
-                translationX = vectorNode.translationX
-                translationY = vectorNode.translationY
-                pivotX = vectorNode.pivotX
-                pivotY = vectorNode.pivotY
-                clipPathData = vectorNode.clipPathData
-                createGroupComponent(vectorNode)
-            }
-            insertAt(index, groupComponent)
-        }
-    }
-    return this
-}
-
 /**
  * Recursively creates the vector graphic composition by traversing the tree structure.
  *
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt
index 5ad4f9c..1bd5d2a 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Placeable.kt
@@ -178,6 +178,7 @@
          * automatic position mirroring will not happen and the [Placeable] will be placed at the
          * given [position], similar to the [place] method.
          *
+         * @param position position it parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
@@ -194,6 +195,8 @@
          * automatic position mirroring will not happen and the [Placeable] will be placed at the
          * given position, similar to the [place] method.
          *
+         * @param x x coordinate in the parent's coordinate system.
+         * @param y y coordinate in the parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
@@ -206,6 +209,8 @@
          * Unlike [placeRelative], the given position will not implicitly react in RTL layout direction
          * contexts.
          *
+         * @param x x coordinate in the parent's coordinate system.
+         * @param y y coordinate in the parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
@@ -218,6 +223,7 @@
          * Unlike [placeRelative], the given [position] will not implicitly react in RTL layout direction
          * contexts.
          *
+         * @param position position it parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
@@ -235,6 +241,7 @@
          * automatic position mirroring will not happen and the [Placeable] will be placed at the
          * given [position], similar to the [place] method.
          *
+         * @param position position it parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
@@ -258,6 +265,8 @@
          * automatic position mirroring will not happen and the [Placeable] will be placed at the
          * given position, similar to the [place] method.
          *
+         * @param x x coordinate in the parent's coordinate system.
+         * @param y y coordinate in the parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
@@ -278,6 +287,8 @@
          * Unlike [placeRelative], the given position will not implicitly react in RTL layout direction
          * contexts.
          *
+         * @param x x coordinate in the parent's coordinate system.
+         * @param y y coordinate in the parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
@@ -298,6 +309,7 @@
          * Unlike [placeRelative], the given [position] will not implicitly react in RTL layout direction
          * contexts.
          *
+         * @param position position it parent's coordinate system.
          * @param zIndex controls the drawing order for the [Placeable]. A [Placeable] with larger
          * [zIndex] will be drawn on top of all the children with smaller [zIndex]. When children
          * have the same [zIndex] the order in which the items were placed is used.
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
index 5c52ed5..8abb20b 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
@@ -567,15 +567,16 @@
                         node.resetLayoutState()
                         if (deactivate) {
                             nodeState.composition?.deactivate()
+                            nodeState.activeState = mutableStateOf(false)
+                        } else {
+                            nodeState.active = false
                         }
                         // create a new instance to avoid change notifications
-                        nodeState.activeState = mutableStateOf(false)
                         nodeState.slotId = ReusedSlotId
                     }
                 }
             }
             slotIdToNode.clear()
-            Snapshot.sendApplyNotifications()
         }
 
         makeSureStateIsConsistent()
@@ -673,7 +674,6 @@
             nodeState.activeState = mutableStateOf(true)
             nodeState.forceReuse = true
             nodeState.forceRecompose = true
-            Snapshot.sendApplyNotifications()
             node
         }
     }
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt
index 20e43e3..b205277 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/NodeChain.kt
@@ -23,6 +23,7 @@
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.areObjectsOfSameType
+import androidx.compose.ui.input.pointer.SuspendPointerInputElement
 import androidx.compose.ui.layout.ModifierInfo
 
 private val SentinelHead = object : Modifier.Node() {
@@ -218,6 +219,16 @@
         tailToHead {
             if (it.isAttached) it.reset()
         }
+        current?.let { elements ->
+            elements.forEachIndexed { i, element ->
+                // we need to make sure the suspending pointer input modifier node is updated after
+                // being reset so we use the latest lambda, even if the keys provided as input
+                // didn't change.
+                if (element is SuspendPointerInputElement) {
+                    elements[i] = ForceUpdateElement
+                }
+            }
+        }
         runDetachLifecycle()
         markAsDetached()
     }
@@ -797,7 +808,7 @@
 internal fun actionForModifiers(prev: Modifier.Element, next: Modifier.Element): Int {
     return if (prev == next)
         ActionReuse
-    else if (areObjectsOfSameType(prev, next))
+    else if (areObjectsOfSameType(prev, next) || prev === ForceUpdateElement)
         ActionUpdate
     else
         ActionReplace
@@ -833,3 +844,20 @@
     }
     return result
 }
+
+@Suppress("ModifierNodeInspectableProperties")
+private object ForceUpdateElement : ModifierNodeElement<Modifier.Node>() {
+    override fun create(): Modifier.Node {
+        throw IllegalStateException("Shouldn't be called")
+    }
+
+    override fun update(node: Modifier.Node) {
+        throw IllegalStateException("Shouldn't be called")
+    }
+
+    override fun hashCode(): Int = 100
+
+    override fun equals(other: Any?): Boolean = other === this
+
+    override fun toString() = "ForceUpdateElement"
+}
diff --git a/constraintlayout/constraintlayout-compose/build.gradle b/constraintlayout/constraintlayout-compose/build.gradle
index 207692f..5a3d7f55 100644
--- a/constraintlayout/constraintlayout-compose/build.gradle
+++ b/constraintlayout/constraintlayout-compose/build.gradle
@@ -34,6 +34,7 @@
                 implementation(project(":compose:foundation:foundation"))
                 implementation(project(":compose:foundation:foundation-layout"))
                 implementation(project(":constraintlayout:constraintlayout-core"))
+                implementation(project(":collection:collection"))
             }
         }
 
diff --git a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/ConstraintLayout.kt b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/ConstraintLayout.kt
index 80dd5e3..02423cd 100644
--- a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/ConstraintLayout.kt
+++ b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/ConstraintLayout.kt
@@ -20,6 +20,7 @@
 import android.os.Handler
 import android.os.Looper
 import android.util.Log
+import androidx.collection.PairIntInt
 import androidx.compose.animation.core.Animatable
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.tween
@@ -2016,7 +2017,7 @@
     private fun measureWidget(
         constraintWidget: ConstraintWidget,
         constraints: Constraints
-    ): Pair<Int, Int> {
+    ): PairIntInt {
         val measurable = constraintWidget.companionWidget
         val widgetId = constraintWidget.stringId
         return when {
@@ -2039,15 +2040,15 @@
                     heightMode,
                     constraints.maxHeight
                 )
-                Pair(constraintWidget.measuredWidth, constraintWidget.measuredHeight)
+                PairIntInt(constraintWidget.measuredWidth, constraintWidget.measuredHeight)
             }
             measurable is Measurable -> {
                 val result = measurable.measure(constraints).also { placeables[measurable] = it }
-                Pair(result.width, result.height)
+                PairIntInt(result.width, result.height)
             }
             else -> {
                 Log.w("CCL", "Nothing to measure for widget: $widgetId")
-                Pair(0, 0)
+                PairIntInt(0, 0)
             }
         }
     }
diff --git a/core/buildSrc b/core/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/core/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/core/core-ktx/src/main/java/androidx/core/text/SpannableString.kt b/core/core-ktx/src/main/java/androidx/core/text/SpannableString.kt
index df53a46..5f857fd 100644
--- a/core/core-ktx/src/main/java/androidx/core/text/SpannableString.kt
+++ b/core/core-ktx/src/main/java/androidx/core/text/SpannableString.kt
@@ -18,7 +18,6 @@
 
 package androidx.core.text
 
-import android.annotation.SuppressLint
 import android.text.Spannable
 import android.text.SpannableString
 import android.text.Spanned.SPAN_INCLUSIVE_EXCLUSIVE
@@ -30,7 +29,6 @@
 public inline fun CharSequence.toSpannable(): Spannable = SpannableString.valueOf(this)
 
 /** Clear all spans from this text. */
-@SuppressLint("SyntheticAccessor") // TODO remove https://issuetracker.google.com/issues/110243369
 public inline fun Spannable.clearSpans(): Unit = getSpans<Any>().forEach { removeSpan(it) }
 
 /**
diff --git a/core/core-location-altitude-proto/build.gradle b/core/core-location-altitude-proto/build.gradle
index ee2c418..c8455e4 100644
--- a/core/core-location-altitude-proto/build.gradle
+++ b/core/core-location-altitude-proto/build.gradle
@@ -44,8 +44,8 @@
 afterEvaluate {
     lint {
         lintOptions {
-            // protobuf generates unannotated and synthetic accessor methods
-            disable("UnknownNullness", "SyntheticAccessor")
+            // protobuf generates unannotated methods
+            disable("UnknownNullness")
         }
     }
 }
diff --git a/core/core-location-altitude/lint-baseline.xml b/core/core-location-altitude/lint-baseline.xml
new file mode 100644
index 0000000..f8fe95f
--- /dev/null
+++ b/core/core-location-altitude/lint-baseline.xml
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        int sizeIj = 1 &lt;&lt; (S2CellIdUtils.MAX_LEVEL - params.getMapS2Level());"
+        errorLine2="                                                            ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/AltitudeConverter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        long z11 = S2CellIdUtils.getParent(s2CellId, params.getMapS2Level());"
+        errorLine2="                                                            ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/AltitudeConverter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                            params.getMapS2Level()),"
+        errorLine2="                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/AltitudeConverter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                            params.getMapS2Level()),"
+        errorLine2="                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/AltitudeConverter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                            params.getMapS2Level())"
+        errorLine2="                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/AltitudeConverter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        double sizeIj = 1 &lt;&lt; (S2CellIdUtils.MAX_LEVEL - params.getMapS2Level());"
+        errorLine2="                                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/AltitudeConverter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getModelRmseMeters can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                        (float) Math.hypot(verticalAccuracyMeters, params.getModelRmseMeters()));"
+        errorLine2="                                                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/AltitudeConverter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getCacheTileS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        return S2CellIdUtils.getParent(s2CellId, params.getCacheTileS2Level());"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getDiskTileS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                S2CellIdUtils.getParent(s2CellId, params.getDiskTileS2Level()));"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="S2TileProto.getByteBuffer can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        ByteString byteString = tiles[tileIndex].getByteBuffer();"
+        errorLine2="                                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ByteString.isEmpty can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        if (byteString.isEmpty()) {"
+        errorLine2="                       ~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ByteString.asReadOnlyByteBuffer can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        ByteBuffer byteBuffer = byteString.asReadOnlyByteBuffer();"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                params.getMapS2Level() - Integer.numberOfTrailingZeros(byteBuffer.limit()) / 2;"
+        errorLine2="                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="            int numBitsRightOfMap = 2 * (S2CellIdUtils.MAX_LEVEL - params.getMapS2Level()) + 1;"
+        errorLine2="                                                                          ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="S2TileProto.getByteJpeg can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        mergeByteImageValues(params, tiles[tileIndex].getByteJpeg(), s2CellIds, tiles, tileIndex,"
+        errorLine2="                                                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="S2TileProto.getBytePng can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        mergeByteImageValues(params, tiles[tileIndex].getBytePng(), s2CellIds, tiles, tileIndex,"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ByteString.isEmpty can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        if (byteString.isEmpty()) {"
+        errorLine2="                       ~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ByteString.newInput can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        try (InputStream inputStream = byteString.newInput()) {"
+        errorLine2="                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        return (iOrJ >> (S2CellIdUtils.MAX_LEVEL - params.getMapS2Level())) % widthOrHeight;"
+        errorLine2="                                                          ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="            Preconditions.checkArgument(S2CellIdUtils.getLevel(s2CellId) == params.getMapS2Level());"
+        errorLine2="                                                                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getModelAMeters can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="            heightsMeters[i] *= params.getModelAMeters();"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getModelBMeters can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="            heightsMeters[i] += params.getModelBMeters();"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getCacheTileS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                1 &lt;&lt; (2 * (params.getMapS2Level() - params.getCacheTileS2Level()));"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                1 &lt;&lt; (2 * (params.getMapS2Level() - params.getCacheTileS2Level()));"
+        errorLine2="                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.getMapS2Level can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="            long s2CellId = S2CellIdUtils.getTraversalStart(cacheKeys[i], params.getMapS2Level());"
+        errorLine2="                                                                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                    S2TileProto.newBuilder().setByteBuffer(ByteString.copyFrom(bytes)).build();"
+        errorLine2="                                                                                       ~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setByteBuffer can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                    S2TileProto.newBuilder().setByteBuffer(ByteString.copyFrom(bytes)).build();"
+        errorLine2="                                             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ByteString.copyFrom can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                    S2TileProto.newBuilder().setByteBuffer(ByteString.copyFrom(bytes)).build();"
+        errorLine2="                                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="S2TileProto.newBuilder can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="                    S2TileProto.newBuilder().setByteBuffer(ByteString.copyFrom(bytes)).build();"
+        errorLine2="                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/GeoidHeightMap.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AbstractMessageLite.toByteArray can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        return value.toByteArray();"
+        errorLine2="                     ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/db/MapParamsEntity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MapParamsProto.parseFrom can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="            return MapParamsProto.parseFrom(byteArray);"
+        errorLine2="                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/db/MapParamsEntity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AbstractMessageLite.toByteArray can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="        return tile.toByteArray();"
+        errorLine2="                    ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/db/TilesEntity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="S2TileProto.parseFrom can only be called from within the same library (__local_aars__:/ssd/ssd5/androidx-main/out/androidx/core/core-location-altitude/build/repackaged/repackaged.jar)"
+        errorLine1="            return S2TileProto.parseFrom(byteArray);"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/altitude/impl/db/TilesEntity.java"/>
+    </issue>
+
+</issues>
diff --git a/core/core-performance-play-services/build.gradle b/core/core-performance-play-services/build.gradle
index a860881..4dc18a8 100644
--- a/core/core-performance-play-services/build.gradle
+++ b/core/core-performance-play-services/build.gradle
@@ -29,6 +29,16 @@
     implementation(libs.kotlinCoroutinesCore)
     implementation(project(":core:core-performance"))
     implementation("androidx.datastore:datastore-preferences:1.0.0")
+    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
+
+    testImplementation(libs.robolectric)
+    androidTestImplementation(libs.junit)
+    androidTestImplementation(libs.testExtJunit)
+    androidTestImplementation(libs.testRunner)
+    androidTestImplementation(libs.truth)
+    androidTestImplementation(libs.espressoCore, excludes.espresso)
+    androidTestImplementation(libs.mockitoAndroid)
+
 
     testImplementation(libs.testCore)
     testImplementation(libs.kotlinStdlib)
diff --git a/core/core-performance-play-services/src/androidTest/java/androidx/core/performance/play/services/PlayServiceDevicePerformanceAndroidTest.kt b/core/core-performance-play-services/src/androidTest/java/androidx/core/performance/play/services/PlayServiceDevicePerformanceAndroidTest.kt
new file mode 100644
index 0000000..033e68a
--- /dev/null
+++ b/core/core-performance-play-services/src/androidTest/java/androidx/core/performance/play/services/PlayServiceDevicePerformanceAndroidTest.kt
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.performance.play.services
+
+import android.app.Application
+import android.content.Context
+import androidx.core.performance.DefaultDevicePerformance
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.android.gms.common.api.Api
+import com.google.android.gms.common.api.ApiException
+import com.google.android.gms.common.api.Status
+import com.google.android.gms.common.api.internal.ApiKey
+import com.google.android.gms.deviceperformance.DevicePerformanceClient
+import com.google.android.gms.tasks.Task
+import com.google.android.gms.tasks.Tasks
+import com.google.common.truth.Truth
+import java.util.concurrent.TimeUnit
+import kotlinx.coroutines.runBlocking
+import org.junit.After
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.`when`
+
+/** Android Unit tests for [PlayServicesDevicePerformance]. */
+@RunWith(AndroidJUnit4::class)
+class PlayServicesDevicePerformanceTest {
+    open class DevicePerformanceClientTest : DevicePerformanceClient {
+        override fun getApiKey(): ApiKey<Api.ApiOptions.NoOptions> {
+            // method for testing purpose
+            return this.apiKey
+        }
+
+        override fun mediaPerformanceClass(): Task<Int> {
+            return Tasks.forResult(0)
+        }
+    }
+
+    private val context: Context = ApplicationProvider.getApplicationContext<Application>()
+    private val defaultMediaPerformanceClass = DefaultDevicePerformance().mediaPerformanceClass
+
+    @After
+    fun tearDown() = runBlocking {
+        PlayServicesDevicePerformance.clearPerformanceClass(context)
+    }
+
+    @Test
+    @MediumTest
+    fun basePlayServiceDevicePerformanceClassTest() {
+        val playServicesDevicePerformance = PlayServicesDevicePerformance(
+            context
+        )
+        val pcScore = playServicesDevicePerformance.mediaPerformanceClass
+        Truth.assertThat(pcScore).isEqualTo(defaultMediaPerformanceClass)
+    }
+
+    @Test
+    @MediumTest
+    fun mockPlayServiceDevicePerformanceClassTest() {
+        val mockClient: DevicePerformanceClient = mock(DevicePerformanceClientTest::class.java)
+        val mediaPerformanceClass = 33
+        `when`(mockClient.mediaPerformanceClass()).thenAnswer {
+            Tasks.forResult(mediaPerformanceClass)
+        }
+        val playServicesDevicePerformance = PlayServicesDevicePerformance(
+            context,
+            mockClient
+        )
+        delayRead()
+        val pcScore = playServicesDevicePerformance.mediaPerformanceClass
+        Truth.assertThat(pcScore).isEqualTo(mediaPerformanceClass)
+    }
+
+    @Test
+    @MediumTest
+    fun delayMockPlayServiceDevicePerformanceClassTest() {
+        val mockClient: DevicePerformanceClient = mock(DevicePerformanceClientTest::class.java)
+
+        // Delay the response from mockClient.mediaPerformanceClass() so
+        // response will be different that provided.
+        `when`(mockClient.mediaPerformanceClass()).thenAnswer {
+            TimeUnit.SECONDS.sleep(5)
+            Tasks.forResult(defaultMediaPerformanceClass + 100)
+        }
+        val playServicesDevicePerformance = PlayServicesDevicePerformance(
+            context,
+            mockClient
+        )
+        val pcScore = playServicesDevicePerformance.mediaPerformanceClass
+        Truth.assertThat(pcScore).isEqualTo(defaultMediaPerformanceClass)
+    }
+
+    @Test
+    @MediumTest
+    fun playServiceCrashPerformanceClassTest() {
+        val mockClient: DevicePerformanceClient = mock(DevicePerformanceClientTest::class.java)
+        `when`(mockClient.mediaPerformanceClass()).thenReturn( // Throw an exception here.
+            Tasks.forException(IllegalStateException())
+        )
+        val pc = PlayServicesDevicePerformance(
+            context,
+            mockClient
+        )
+        // Since the gms service has crashed, the library should still return default value.
+        Truth.assertThat(pc.mediaPerformanceClass).isEqualTo(defaultMediaPerformanceClass)
+    }
+
+    @Test
+    @MediumTest
+    fun playServiceNotStartPerformanceClassTest() {
+        val mockClient: DevicePerformanceClient = mock(DevicePerformanceClientTest::class.java)
+        `when`(mockClient.mediaPerformanceClass()).thenReturn( // Throw an exception here.
+            Tasks.forException(ApiException(Status.RESULT_TIMEOUT))
+        )
+        val pc = PlayServicesDevicePerformance(
+            context,
+            mockClient
+        )
+        // Since the gms service not started, the library should still return default value.
+        Truth.assertThat(pc.mediaPerformanceClass).isEqualTo(defaultMediaPerformanceClass)
+    }
+
+    /* Add delay to make sure that value is written in Preference datastore before reading it */
+    private fun delayRead() {
+        val delayTime: Long = 200
+        TimeUnit.MILLISECONDS.sleep(delayTime)
+    }
+}
diff --git a/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformance.kt b/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformance.kt
index cf919ba..2fa0a804 100644
--- a/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformance.kt
+++ b/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformance.kt
@@ -18,13 +18,16 @@
 
 import android.content.Context
 import android.util.Log
+import androidx.annotation.VisibleForTesting
 import androidx.core.performance.DefaultDevicePerformance
 import androidx.core.performance.DevicePerformance
 import androidx.datastore.preferences.core.edit
 import androidx.datastore.preferences.core.intPreferencesKey
 import androidx.datastore.preferences.preferencesDataStore
+import com.google.android.gms.common.api.ApiException
 import com.google.android.gms.deviceperformance.DevicePerformanceClient
 import kotlin.math.max
+import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.flow.map
@@ -40,6 +43,7 @@
     private val tag = "PlayServicesDevicePerformance"
 
     private val defaultMpc = DefaultDevicePerformance()
+    private val playServicesValueStoredDeferred = CompletableDeferred<Boolean>()
 
     override val mediaPerformanceClass get() = lazyMpc.value
     private val lazyMpc =
@@ -54,26 +58,38 @@
             }
         }
 
-    private val Context.performanceStore by preferencesDataStore(name = "media_performance_class")
-    private val mpcKey = intPreferencesKey("mpc_value")
-
-    private val client: DevicePerformanceClient =
-        com.google.android.gms.deviceperformance.DevicePerformance.getClient(context)
-
     init {
         Log.v(
             tag,
             "Getting mediaPerformanceClass from " +
                 "com.google.android.gms.deviceperformance.DevicePerformanceClient"
         )
-        client.mediaPerformanceClass().addOnSuccessListener { result ->
-            runBlocking {
-                Log.v(tag, "Got mediaPerformanceClass $result")
-                val storedVal = max(result, defaultMpc.mediaPerformanceClass)
-                launch {
-                    savePerformanceClass(storedVal)
-                    Log.v(tag, "Saved mediaPerformanceClass $storedVal")
-                }
+        updatePerformanceStore(
+            com.google.android.gms.deviceperformance.DevicePerformance.getClient(context)
+        )
+    }
+
+    @VisibleForTesting
+    internal constructor(context: Context, client: DevicePerformanceClient) : this(context) {
+        // mock client should wait for the playServices client to finish,
+        // so the test results are determined by the mock client.
+        runBlocking {
+            playServicesValueStoredDeferred.await()
+        }
+        updatePerformanceStore(client)
+    }
+
+    private val mpcKey = intPreferencesKey("mpc_value")
+
+    internal companion object {
+        // To avoid creating multiple instance of datastore
+        private val Context.performanceStore by
+        preferencesDataStore(name = "media_performance_class")
+
+        @VisibleForTesting
+        suspend fun clearPerformanceClass(context: Context) {
+            context.performanceStore.edit {
+                it.clear()
             }
         }
     }
@@ -90,4 +106,25 @@
             values[mpcKey] = value
         }
     }
+
+    private fun updatePerformanceStore(client: DevicePerformanceClient) {
+        client.mediaPerformanceClass().addOnSuccessListener { result ->
+            runBlocking {
+                Log.v(tag, "Got mediaPerformanceClass $result")
+                val storedVal = max(result, defaultMpc.mediaPerformanceClass)
+                launch {
+                    savePerformanceClass(storedVal)
+                    Log.v(tag, "Saved mediaPerformanceClass $storedVal")
+                    playServicesValueStoredDeferred.complete(true)
+                }
+            }
+        }.addOnFailureListener { e: Exception ->
+            if (e is ApiException) {
+                Log.e(tag, "Error saving mediaPerformanceClass: $e")
+            } else if (e is IllegalStateException) {
+                Log.e(tag, "Error saving mediaPerformanceClass: $e")
+            }
+            playServicesValueStoredDeferred.complete(true)
+        }
+    }
 }
diff --git a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
index 986476e..64619dd 100644
--- a/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
+++ b/core/core-telecom/integration-tests/testapp/src/main/java/androidx/core/telecom/test/CallingMainActivity.kt
@@ -29,7 +29,7 @@
 import androidx.core.view.WindowCompat
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CoroutineExceptionHandler
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -117,42 +117,56 @@
         Log.i(TAG, "addCallWithAttributes: attributes=$attributes")
         val callObject = VoipCall()
 
-        CoroutineScope(Dispatchers.IO).launch {
-            try {
-                mCallsManager!!.addCall(attributes) {
-                    // set the client callback implementation
-                    setCallback(callObject.mCallControlCallbackImpl)
-
-                    // inject client control interface into the VoIP call object
-                    callObject.setCallId(getCallId().toString())
-                    callObject.setCallControl(this)
-
-                    // Collect updates
-                    launch {
-                        currentCallEndpoint.collect {
-                            callObject.onCallEndpointChanged(it)
-                        }
-                    }
-
-                    launch {
-                        availableEndpoints.collect {
-                            callObject.onAvailableCallEndpointsChanged(it)
-                        }
-                    }
-
-                    launch {
-                        isMuted.collect {
-                            callObject.onMuteStateChanged(it)
-                        }
-                    }
-                }
-                addCallRow(callObject)
-            } catch (e: CancellationException) {
-                Log.i(TAG, "addCallWithAttributes: cancellationException:$e")
+        try {
+            val handler = CoroutineExceptionHandler { _, exception ->
+                Log.i(TAG, "CoroutineExceptionHandler: handling e=$exception")
             }
+
+            CoroutineScope(Dispatchers.IO).launch(handler) {
+                try {
+                    mCallsManager!!.addCall(attributes) {
+                        // set the client callback implementation
+                        setCallback(callObject.mCallControlCallbackImpl)
+
+                        // inject client control interface into the VoIP call object
+                        callObject.setCallId(getCallId().toString())
+                        callObject.setCallControl(this)
+
+                        // Collect updates
+                        launch {
+                            currentCallEndpoint.collect {
+                                callObject.onCallEndpointChanged(it)
+                            }
+                        }
+
+                        launch {
+                            availableEndpoints.collect {
+                                callObject.onAvailableCallEndpointsChanged(it)
+                            }
+                        }
+
+                        launch {
+                            isMuted.collect {
+                                callObject.onMuteStateChanged(it)
+                            }
+                        }
+                        addCallRow(callObject)
+                    }
+                } catch (e: Exception) {
+                    logException(e, "addCallWithAttributes: catch inner")
+                } finally {
+                    Log.i(TAG, "addCallWithAttributes: finally block")
+                }
+            }
+        } catch (e: Exception) {
+            logException(e, "addCallWithAttributes: catch outer")
         }
     }
 
+    private fun logException(e: Exception, prefix: String) {
+        Log.i(TAG, "$prefix: e=[$e], e.msg=[${e.message}], e.stack:${e.printStackTrace()}")
+    }
+
     private fun addCallRow(callObject: VoipCall) {
         mCallObjects.add(CallRow(++mCallCount, callObject))
         callObject.setCallAdapter(mAdapter)
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/BasicCallControlsTest.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/BasicCallControlsTest.kt
index 6ca77e6..9c64b4a 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/BasicCallControlsTest.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/BasicCallControlsTest.kt
@@ -21,6 +21,7 @@
 import android.telecom.DisconnectCause
 import androidx.annotation.RequiresApi
 import androidx.core.telecom.CallAttributesCompat
+import androidx.core.telecom.CallControlScope
 import androidx.core.telecom.CallEndpointCompat
 import androidx.core.telecom.CallException
 import androidx.core.telecom.internal.utils.Utils
@@ -30,8 +31,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
-import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.cancel
+import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.runBlocking
@@ -266,6 +267,29 @@
         verifyAnswerCallFails_CallbackNotSet()
     }
 
+    /**
+     * Verify that the [androidx.core.telecom.CallsManager.addCall] blocks until the session is
+     * disconnected
+     */
+    @SdkSuppress(minSdkVersion = VERSION_CODES.O)
+    @LargeTest
+    @Test
+    fun testTiming() {
+        setUpBackwardsCompatTest()
+        var flag = false
+        runBlocking {
+            mCallsManager.addCall(TestUtils.OUTGOING_CALL_ATTRIBUTES) {
+                setCallback(TestUtils.mCallControlCallbacksImpl)
+                launch {
+                    delay(10)
+                    disconnect(DisconnectCause(DisconnectCause.LOCAL))
+                    flag = true
+                }
+            }
+            assertTrue(flag)
+        }
+    }
+
     /***********************************************************************************************
      *                           Helpers
      *********************************************************************************************/
@@ -281,8 +305,7 @@
      */
     private fun runBlocking_addCallAndSetActive(callAttributesCompat: CallAttributesCompat) {
         runBlocking {
-            val deferred = CompletableDeferred<Unit>()
-            assertWithinTimeout_addCall(deferred, callAttributesCompat) {
+            assertWithinTimeout_addCall(callAttributesCompat) {
                 launch {
                     val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
                     assertNotNull("The returned Call object is <NULL>", call)
@@ -293,7 +316,6 @@
                     }
                     TestUtils.waitOnCallState(call!!, Call.STATE_ACTIVE)
                     assertTrue(disconnect(DisconnectCause(DisconnectCause.LOCAL)))
-                    deferred.complete(Unit) // completed all asserts. cancel timeout!
                 }
             }
         }
@@ -302,8 +324,7 @@
     // similar to runBlocking_addCallAndSetActive except for toggling
     private fun runBlocking_ToggleCallAsserts(callAttributesCompat: CallAttributesCompat) {
         runBlocking {
-            val deferred = CompletableDeferred<Unit>()
-            assertWithinTimeout_addCall(deferred, callAttributesCompat) {
+            assertWithinTimeout_addCall(callAttributesCompat) {
                 launch {
                     val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
                     assertNotNull("The returned Call object is <NULL>", call)
@@ -314,7 +335,6 @@
                         TestUtils.waitOnCallState(call, Call.STATE_HOLDING)
                     }
                     assertTrue(disconnect(DisconnectCause(DisconnectCause.LOCAL)))
-                    deferred.complete(Unit) // completed all asserts. cancel timeout!
                 }
             }
         }
@@ -322,8 +342,7 @@
 
     private fun runBlocking_ShouldFailHold(callAttributesCompat: CallAttributesCompat) {
         runBlocking {
-            val deferred = CompletableDeferred<Unit>()
-            assertWithinTimeout_addCall(deferred, callAttributesCompat) {
+            assertWithinTimeout_addCall(callAttributesCompat) {
                 launch {
                     val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
                     assertNotNull("The returned Call object is <NULL>", call)
@@ -331,7 +350,6 @@
                     TestUtils.waitOnCallState(call!!, Call.STATE_ACTIVE)
                     assertFalse(setInactive()) // API under test / expect failure
                     assertTrue(disconnect(DisconnectCause(DisconnectCause.LOCAL)))
-                    deferred.complete(Unit) // completed all asserts. cancel timeout!
                 }
             }
         }
@@ -340,8 +358,7 @@
     // similar to runBlocking_addCallAndSetActive except for requesting a new call endpoint
     private fun runBlocking_RequestEndpointChangeAsserts() {
         runBlocking {
-            val deferred = CompletableDeferred<Unit>()
-            assertWithinTimeout_addCall(deferred, TestUtils.OUTGOING_CALL_ATTRIBUTES) {
+            assertWithinTimeout_addCall(TestUtils.OUTGOING_CALL_ATTRIBUTES) {
                 launch {
                     // ============================================================================
                     //   NOTE:: DO NOT DELAY BEFORE COLLECTING FLOWS OR THEY COULD BE MISSED!!
@@ -362,7 +379,6 @@
                         assertTrue(requestEndpointChange(anotherEndpoint!!))
                     }
                     assertTrue(disconnect(DisconnectCause(DisconnectCause.LOCAL)))
-                    deferred.complete(Unit) // completed all asserts. cancel timeout!
                 }
             }
         }
@@ -379,8 +395,7 @@
     @Suppress("deprecation")
     private fun verifyMuteStateChange() {
         runBlocking {
-            val deferred = CompletableDeferred<Unit>()
-            assertWithinTimeout_addCall(deferred, TestUtils.OUTGOING_CALL_ATTRIBUTES) {
+            assertWithinTimeout_addCall(TestUtils.OUTGOING_CALL_ATTRIBUTES) {
                 launch {
                     val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
                     assertNotNull("The returned Call object is <NULL>", call)
@@ -405,11 +420,9 @@
                             }
                         }
                     }
-
                     // Ensure that the updated mute state was collected
                     assertTrue(muteStateChanged)
                     assertTrue(disconnect(DisconnectCause(DisconnectCause.LOCAL)))
-                    deferred.complete(Unit) // completed all asserts. cancel timeout!
                 }
             }
         }
@@ -419,9 +432,8 @@
     private fun verifyAnswerCallFails_CallbackNotSet() {
         try {
             runBlocking {
-                val deferred = CompletableDeferred<Unit>()
                 // Skip setting callback
-                assertWithinTimeout_addCall(deferred, TestUtils.INCOMING_CALL_ATTRIBUTES, false) {
+                assertWithinTimeout_addCall(TestUtils.INCOMING_CALL_ATTRIBUTES, false) {
                     launch {
                         val call = TestUtils.waitOnInCallServiceToReachXCalls(1)
                         assertNotNull("The returned Call object is <NULL>", call)
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallAudioTest.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallAudioTest.kt
index 74d846e..e8ac34e 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallAudioTest.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/InCallAudioTest.kt
@@ -28,7 +28,6 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
-import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.launch
@@ -120,8 +119,7 @@
      */
     private fun runBlocking_addCall_assertAudioModeInCommunication() {
         runBlocking {
-            val deferred = CompletableDeferred<Unit>()
-            assertWithinTimeout_addCall(deferred, TestUtils.OUTGOING_CALL_ATTRIBUTES) {
+            assertWithinTimeout_addCall(TestUtils.OUTGOING_CALL_ATTRIBUTES) {
                 launch {
                     Log.i(LOG_TAG, "runBlocking_addCall_assertAudioModeInCommunication: " +
                         "initial AudioManager mode = ${getAudioModeName(mAudioManager.mode)}")
@@ -133,7 +131,6 @@
                         delay(1) // sleep x millisecond(s) instead of spamming check
                     }
                     Assert.assertTrue(disconnect(DisconnectCause(DisconnectCause.LOCAL)))
-                    deferred.complete(Unit) // completed all asserts. cancel timeout!
                 }
             }
         }
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/JetpackConnectionServiceTest.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/JetpackConnectionServiceTest.kt
index ab14abf..1bdfbdc 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/JetpackConnectionServiceTest.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/JetpackConnectionServiceTest.kt
@@ -31,6 +31,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
+import kotlinx.coroutines.CompletableDeferred
 import org.junit.After
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotNull
@@ -123,7 +124,7 @@
         ConnectionRequest {
         // wrap in PendingRequest
         val pr = JetpackConnectionService.PendingConnectionRequest(
-            callAttributesCompat, callChannels, mWorkerContext, null
+            callAttributesCompat, callChannels, mWorkerContext, null, CompletableDeferred()
         )
         // add to the list of pendingRequests
         JetpackConnectionService.mPendingConnectionRequests.add(pr)
diff --git a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/BaseTelecomTest.kt b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/BaseTelecomTest.kt
index 20abe0a..aa162db 100644
--- a/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/BaseTelecomTest.kt
+++ b/core/core-telecom/src/androidTest/java/androidx/core/telecom/test/utils/BaseTelecomTest.kt
@@ -34,7 +34,6 @@
 import androidx.test.filters.SdkSuppress
 import androidx.testutils.TestExecutor
 import kotlin.coroutines.CoroutineContext
-import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.TimeoutCancellationException
 import kotlinx.coroutines.asCoroutineDispatcher
 import kotlinx.coroutines.withTimeout
@@ -143,7 +142,6 @@
      * are not completed in time. It's important to do this
      */
     suspend fun assertWithinTimeout_addCall(
-        deferred: CompletableDeferred<Unit>,
         attributes: CallAttributesCompat,
         setCallback: Boolean = true,
         assertBlock: CallControlScope.() -> (Unit)
@@ -161,9 +159,6 @@
                     }
                     assertBlock()
                 }
-                Log.i(TestUtils.LOG_TAG, "assertWithinTimeout: execution <PAUSED>")
-                deferred.await()
-                Log.i(TestUtils.LOG_TAG, "assertWithinTimeout: execution <UN-PAUSED>")
             }
         } catch (timeout: TimeoutCancellationException) {
             Log.i(TestUtils.LOG_TAG, "assertWithinTimeout: reached timeout; dumping telecom")
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt b/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
index 1559181..89c75e8 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/CallsManager.kt
@@ -197,6 +197,10 @@
         // Setup channels for the CallEventCallbacks that only provide info updates
         val callChannels = CallChannels()
         callAttributes.mHandle = getPhoneAccountHandleForPackage()
+        // This variable controls the addCall execution in the calling activity. AddCall will block
+        // for the duration of the session.  When the session is terminated via a disconnect or
+        // exception, addCall will unblock.
+        val blockingSessionExecution = CompletableDeferred<Unit>(parent = coroutineContext.job)
 
         // create a call session based off the build version
         @RequiresApi(34)
@@ -206,7 +210,7 @@
             val openResult = CompletableDeferred<CallSession>(parent = coroutineContext.job)
             // CallSession is responsible for handling both CallControl responses from the Platform
             // and propagates CallControlCallbacks that originate in the Platform out to the client.
-            val callSession = CallSession(coroutineContext)
+            val callSession = CallSession(coroutineContext, blockingSessionExecution)
 
             /**
              * The Platform [android.telecom.TelecomManager.addCall] requires a
@@ -243,6 +247,7 @@
                 CallSession.CallControlScopeImpl(
                     openResult.getCompleted(),
                     callChannels,
+                    blockingSessionExecution,
                     coroutineContext
                 )
 
@@ -256,7 +261,7 @@
                 CompletableDeferred<CallSessionLegacy>(parent = coroutineContext.job)
 
             val request = JetpackConnectionService.PendingConnectionRequest(
-                callAttributes, callChannels, coroutineContext, openResult
+                callAttributes, callChannels, coroutineContext, openResult, blockingSessionExecution
             )
 
             mConnectionService.createConnectionRequest(mTelecomManager, request)
@@ -266,6 +271,7 @@
             val scope = CallSessionLegacy.CallControlScopeImpl(
                 openResult.getCompleted(),
                 callChannels,
+                blockingSessionExecution,
                 coroutineContext
             )
 
@@ -273,6 +279,7 @@
             // CallControlScope interface implementation declared above.
             scope.block()
         }
+        blockingSessionExecution.await()
     }
 
     private suspend fun pauseExecutionUntilCallIsReady_orTimeout(
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
index 0f2b720..495b7b9 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSession.kt
@@ -37,7 +37,10 @@
 @RequiresApi(34)
 @OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
 @Suppress("ClassVerificationFailure")
-internal class CallSession(coroutineContext: CoroutineContext) {
+internal class CallSession(
+    coroutineContext: CoroutineContext,
+    private val blockingSessionExecution: CompletableDeferred<Unit>
+) {
     private val mCoroutineContext = coroutineContext
     private var mPlatformInterface: android.telecom.CallControl? = null
     private var mClientInterface: CallControlCallback? = null
@@ -209,6 +212,7 @@
         CoroutineScope(mCoroutineContext).launch {
             val clientResponse: Boolean = mClientInterface!!.onDisconnect(cause)
             wasCompleted.accept(clientResponse)
+            blockingSessionExecution.complete(Unit)
         }
     }
 
@@ -220,6 +224,7 @@
     class CallControlScopeImpl(
         private val session: CallSession,
         callChannels: CallChannels,
+        private val blockingSessionExecution: CompletableDeferred<Unit>,
         override val coroutineContext: CoroutineContext
     ) : CallControlScope {
         //  handle actionable/handshake events that originate in the platform
@@ -254,7 +259,9 @@
 
         override suspend fun disconnect(disconnectCause: DisconnectCause): Boolean {
             verifySessionCallbacks()
-            return session.disconnect(disconnectCause)
+            val response = session.disconnect(disconnectCause)
+            blockingSessionExecution.complete(Unit)
+            return response
         }
 
         override suspend fun requestEndpointChange(endpoint: CallEndpointCompat):
@@ -284,7 +291,7 @@
                         androidx.core.telecom.CallException.ERROR_CALLBACKS_CODE
                     )
                 }
-            }
+           }
         }
     }
 }
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
index 0ce89f4..441cd6d 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/CallSessionLegacy.kt
@@ -22,7 +22,6 @@
 import android.os.ParcelUuid
 import android.telecom.Call
 import android.telecom.CallAudioState
-import android.telecom.Connection
 import android.telecom.DisconnectCause
 import android.util.Log
 import androidx.annotation.DoNotInline
@@ -33,6 +32,7 @@
 import androidx.core.telecom.CallException
 import androidx.core.telecom.internal.utils.EndpointUtils
 import kotlin.coroutines.CoroutineContext
+import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.receiveAsFlow
@@ -42,7 +42,8 @@
 internal class CallSessionLegacy(
     private val id: ParcelUuid,
     private val callChannels: CallChannels,
-    private val coroutineContext: CoroutineContext
+    private val coroutineContext: CoroutineContext,
+    private val blockingSessionExecution: CompletableDeferred<Unit>
 ) : android.telecom.Connection() {
     // instance vars
     private val TAG: String = CallSessionLegacy::class.java.simpleName
@@ -266,6 +267,7 @@
                 DisconnectCause(DisconnectCause.LOCAL)
             )
             setDisconnected(DisconnectCause(DisconnectCause.LOCAL))
+            blockingSessionExecution.complete(Unit)
         }
     }
 
@@ -310,6 +312,7 @@
     class CallControlScopeImpl(
         private val session: CallSessionLegacy,
         callChannels: CallChannels,
+        private val blockingSessionExecution: CompletableDeferred<Unit>,
         override val coroutineContext: CoroutineContext
     ) : CallControlScope {
         //  handle actionable/handshake events that originate in the platform
@@ -342,7 +345,9 @@
 
         override suspend fun disconnect(disconnectCause: DisconnectCause): Boolean {
             verifySessionCallbacks()
-            return session.setConnectionDisconnect(disconnectCause)
+            val result = session.setConnectionDisconnect(disconnectCause)
+            blockingSessionExecution.complete(Unit)
+            return result
         }
 
         override suspend fun requestEndpointChange(endpoint: CallEndpointCompat): Boolean {
diff --git a/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt b/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
index 5e9aa66..b22a4e5 100644
--- a/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
+++ b/core/core-telecom/src/main/java/androidx/core/telecom/internal/JetpackConnectionService.kt
@@ -40,7 +40,8 @@
         val callAttributes: CallAttributesCompat,
         val callChannel: CallChannels,
         val coroutineContext: CoroutineContext,
-        val completableDeferred: CompletableDeferred<CallSessionLegacy>?
+        val completableDeferred: CompletableDeferred<CallSessionLegacy>?,
+        val execution: CompletableDeferred<Unit>
     )
 
     companion object {
@@ -141,7 +142,8 @@
         val jetpackConnection = CallSessionLegacy(
             ParcelUuid.fromString(UUID.randomUUID().toString()),
             targetRequest.callChannel,
-            targetRequest.coroutineContext
+            targetRequest.coroutineContext,
+            targetRequest.execution
         )
 
         // set display name
diff --git a/core/core/api/current.ignore b/core/core/api/current.ignore
deleted file mode 100644
index a3517f0..0000000
--- a/core/core/api/current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-AddedMethod: androidx.core.util.TypedValueCompat#getUnitFromComplexDimension(int):
-    Added method androidx.core.util.TypedValueCompat.getUnitFromComplexDimension(int)
-AddedMethod: androidx.core.widget.TextViewCompat#setLineHeight(android.widget.TextView, int, float):
-    Added method androidx.core.widget.TextViewCompat.setLineHeight(android.widget.TextView,int,float)
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index 019f4c6..8a8c5b1 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -2461,12 +2461,12 @@
     method public androidx.core.view.ContentInfoCompat.Builder setSource(int);
   }
 
-  public class DifferentialMotionFlingHelper {
-    ctor public DifferentialMotionFlingHelper(android.content.Context, androidx.core.view.DifferentialMotionFlingHelper.DifferentialMotionFlingTarget);
+  public class DifferentialMotionFlingController {
+    ctor public DifferentialMotionFlingController(android.content.Context, androidx.core.view.DifferentialMotionFlingTarget);
     method public void onMotionEvent(android.view.MotionEvent, int);
   }
 
-  public static interface DifferentialMotionFlingHelper.DifferentialMotionFlingTarget {
+  public interface DifferentialMotionFlingTarget {
     method public float getScaledScrollFactor();
     method public boolean startDifferentialMotionFling(float);
     method public void stopDifferentialMotionFling();
diff --git a/core/core/api/restricted_current.ignore b/core/core/api/restricted_current.ignore
deleted file mode 100644
index a3517f0..0000000
--- a/core/core/api/restricted_current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-AddedMethod: androidx.core.util.TypedValueCompat#getUnitFromComplexDimension(int):
-    Added method androidx.core.util.TypedValueCompat.getUnitFromComplexDimension(int)
-AddedMethod: androidx.core.widget.TextViewCompat#setLineHeight(android.widget.TextView, int, float):
-    Added method androidx.core.widget.TextViewCompat.setLineHeight(android.widget.TextView,int,float)
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index 75bc7fa..d8f15cd 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -2899,12 +2899,12 @@
   @IntDef({androidx.core.view.ContentInfoCompat.SOURCE_APP, androidx.core.view.ContentInfoCompat.SOURCE_CLIPBOARD, androidx.core.view.ContentInfoCompat.SOURCE_INPUT_METHOD, androidx.core.view.ContentInfoCompat.SOURCE_DRAG_AND_DROP, androidx.core.view.ContentInfoCompat.SOURCE_AUTOFILL, androidx.core.view.ContentInfoCompat.SOURCE_PROCESS_TEXT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentInfoCompat.Source {
   }
 
-  public class DifferentialMotionFlingHelper {
-    ctor public DifferentialMotionFlingHelper(android.content.Context, androidx.core.view.DifferentialMotionFlingHelper.DifferentialMotionFlingTarget);
+  public class DifferentialMotionFlingController {
+    ctor public DifferentialMotionFlingController(android.content.Context, androidx.core.view.DifferentialMotionFlingTarget);
     method public void onMotionEvent(android.view.MotionEvent, int);
   }
 
-  public static interface DifferentialMotionFlingHelper.DifferentialMotionFlingTarget {
+  public interface DifferentialMotionFlingTarget {
     method public float getScaledScrollFactor();
     method public boolean startDifferentialMotionFling(float);
     method public void stopDifferentialMotionFling();
diff --git a/core/core/src/androidTest/java/androidx/core/os/TraceCompatTest.java b/core/core/src/androidTest/java/androidx/core/os/TraceCompatTest.java
index 08f73a3..3a32d2f 100644
--- a/core/core/src/androidTest/java/androidx/core/os/TraceCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/os/TraceCompatTest.java
@@ -93,6 +93,7 @@
     }
 
     @Test
+    @Ignore("b/295944187")
     public void beginAndEndSectionAsync() throws IOException {
         startTrace();
         TraceCompat.beginAsyncSection("beginAndEndSectionAsync", /*cookie=*/5099);
diff --git a/core/core/src/androidTest/java/androidx/core/view/DifferentialMotionFlingHelperTest.java b/core/core/src/androidTest/java/androidx/core/view/DifferentialMotionFlingControllerTest.java
similarity index 93%
rename from core/core/src/androidTest/java/androidx/core/view/DifferentialMotionFlingHelperTest.java
rename to core/core/src/androidTest/java/androidx/core/view/DifferentialMotionFlingControllerTest.java
index d0072b8..83cd7e1 100644
--- a/core/core/src/androidTest/java/androidx/core/view/DifferentialMotionFlingHelperTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/DifferentialMotionFlingControllerTest.java
@@ -32,20 +32,20 @@
 
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class DifferentialMotionFlingHelperTest {
+public class DifferentialMotionFlingControllerTest {
     private int mMinVelocity = 0;
     private int mMaxVelocity = Integer.MAX_VALUE;
     /** A fake velocity value that's going to be returned from the velocity provider. */
     private float mVelocity;
     private boolean mVelocityCalculated;
 
-    private final DifferentialMotionFlingHelper.DifferentialVelocityProvider mVelocityProvider =
+    private final DifferentialMotionFlingController.DifferentialVelocityProvider mVelocityProvider =
             (vt, event, axis) -> {
                 mVelocityCalculated = true;
                 return mVelocity;
             };
 
-    private final DifferentialMotionFlingHelper.FlingVelocityThresholdCalculator
+    private final DifferentialMotionFlingController.FlingVelocityThresholdCalculator
             mVelocityThresholdCalculator =
                     (ctx, buffer, event, axis) -> {
                         buffer[0] = mMinVelocity;
@@ -55,11 +55,11 @@
     private final TestDifferentialMotionFlingTarget mFlingTarget =
             new TestDifferentialMotionFlingTarget();
 
-    private DifferentialMotionFlingHelper mFlingHelper;
+    private DifferentialMotionFlingController mFlingController;
 
     @Before
     public void setUp() throws Exception {
-        mFlingHelper = new DifferentialMotionFlingHelper(
+        mFlingController = new DifferentialMotionFlingController(
                 ApplicationProvider.getApplicationContext(),
                 mFlingTarget,
                 mVelocityThresholdCalculator,
@@ -166,7 +166,7 @@
 
     private void deliverEventWithVelocity(MotionEvent ev, int axis, float velocity) {
         mVelocity = velocity;
-        mFlingHelper.onMotionEvent(ev, axis);
+        mFlingController.onMotionEvent(ev, axis);
         ev.recycle();
     }
 
diff --git a/core/core/src/androidTest/java/androidx/core/view/TestDifferentialMotionFlingTarget.java b/core/core/src/androidTest/java/androidx/core/view/TestDifferentialMotionFlingTarget.java
index 3651cd6..ea058b4 100644
--- a/core/core/src/androidTest/java/androidx/core/view/TestDifferentialMotionFlingTarget.java
+++ b/core/core/src/androidTest/java/androidx/core/view/TestDifferentialMotionFlingTarget.java
@@ -17,10 +17,9 @@
 package androidx.core.view;
 
 /**
- * A test implementation for {@link DifferentialMotionFlingHelper.DifferentialMotionFlingTarget}.
+ * A test implementation for {@link DifferentialMotionFlingTarget}.
  */
-class TestDifferentialMotionFlingTarget
-        implements DifferentialMotionFlingHelper.DifferentialMotionFlingTarget {
+class TestDifferentialMotionFlingTarget implements DifferentialMotionFlingTarget {
     float mLastFlingVelocity = 0;
     int mNumStops = 0;
 
diff --git a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
index d6fd006..7d25138 100644
--- a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
@@ -35,6 +35,7 @@
 import androidx.test.filters.SmallTest;
 
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -58,6 +59,7 @@
         accessibilityNodeInfoCompat.setCollectionItemInfo(null);
     }
 
+    @SdkSuppress(minSdkVersion = 19)
     @Test
     public void testSetCollectionItemInfoCompatBuilder_withDefaultValues() {
         AccessibilityNodeInfoCompat.CollectionItemInfoCompat collectionItemInfoCompat =
@@ -74,6 +76,7 @@
         assertThat(collectionItemInfoCompat.isHeading()).isFalse();
     }
 
+    @SdkSuppress(minSdkVersion = 19)
     @Test
     public void testSetCollectionInfoCompatBuilder_withRealValues() {
         AccessibilityNodeInfoCompat.CollectionItemInfoCompat collectionItemInfoCompat =
@@ -459,6 +462,7 @@
         assertThat(accessibilityNodeInfoCompat.isTextSelectable()).isTrue();
     }
 
+    @Ignore("b/296118211")
     @SmallTest
     @Test
     public void testActionScrollInDirection() {
diff --git a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java
index a9a25b9..9c89742 100644
--- a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java
@@ -38,6 +38,7 @@
 
 import java.util.Locale;
 
+@SdkSuppress(minSdkVersion = 21)
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class AccessibilityWindowInfoCompatTest {
diff --git a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewOnGenericMotionEventTest.java b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewOnGenericMotionEventTest.java
index f45f0c7..29abb0e 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewOnGenericMotionEventTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewOnGenericMotionEventTest.java
@@ -22,7 +22,7 @@
 
 import android.view.MotionEvent;
 
-import androidx.core.view.DifferentialMotionFlingHelper;
+import androidx.core.view.DifferentialMotionFlingController;
 import androidx.core.view.InputDeviceCompat;
 import androidx.core.view.MotionEventCompat;
 import androidx.test.core.app.ApplicationProvider;
@@ -37,7 +37,7 @@
 @RunWith(AndroidJUnit4.class)
 public class NestedScrollViewOnGenericMotionEventTest {
 
-    private DifferentialMotionFlingHelper mSpyDifferentialFlingHelper;
+    private DifferentialMotionFlingController mSpyDifferentialFlingController;
 
     private NestedScrollView mNestedScrollView;
 
@@ -45,8 +45,8 @@
     public void setUp() throws Exception {
         mNestedScrollView = new NestedScrollView(ApplicationProvider.getApplicationContext());
 
-        mSpyDifferentialFlingHelper = spy(mNestedScrollView.mDifferentialMotionFlingHelper);
-        mNestedScrollView.mDifferentialMotionFlingHelper = mSpyDifferentialFlingHelper;
+        mSpyDifferentialFlingController = spy(mNestedScrollView.mDifferentialMotionFlingController);
+        mNestedScrollView.mDifferentialMotionFlingController = mSpyDifferentialFlingController;
     }
 
     @Test
@@ -55,7 +55,7 @@
 
         mNestedScrollView.onGenericMotionEvent(event);
 
-        verify(mSpyDifferentialFlingHelper).onMotionEvent(event, MotionEventCompat.AXIS_SCROLL);
+        verify(mSpyDifferentialFlingController).onMotionEvent(event, MotionEventCompat.AXIS_SCROLL);
     }
 
     @Test
@@ -64,7 +64,7 @@
 
         mNestedScrollView.onGenericMotionEvent(event);
 
-        verify(mSpyDifferentialFlingHelper).onMotionEvent(event, MotionEvent.AXIS_VSCROLL);
+        verify(mSpyDifferentialFlingController).onMotionEvent(event, MotionEvent.AXIS_VSCROLL);
     }
 
     @Test
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompat.java b/core/core/src/main/java/androidx/core/app/NotificationCompat.java
index 848e66e..7effc27 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompat.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompat.java
@@ -8972,7 +8972,6 @@
              * on this builder.</p>
              */
             @NonNull
-            @SuppressLint("SyntheticAccessor")
             public BubbleMetadata build() {
                 if (mShortcutId == null && mPendingIntent == null) {
                     throw new NullPointerException(
diff --git a/core/core/src/main/java/androidx/core/content/IntentSanitizer.java b/core/core/src/main/java/androidx/core/content/IntentSanitizer.java
index 9eaaaf2..154a9fc 100644
--- a/core/core/src/main/java/androidx/core/content/IntentSanitizer.java
+++ b/core/core/src/main/java/androidx/core/content/IntentSanitizer.java
@@ -845,7 +845,6 @@
          *
          * @return the IntentSanitizer
          */
-        @SuppressLint("SyntheticAccessor")
         @NonNull
         public IntentSanitizer build() {
             if ((mAllowAnyComponent && mAllowSomeComponents)
diff --git a/core/core/src/main/java/androidx/core/provider/FontProvider.java b/core/core/src/main/java/androidx/core/provider/FontProvider.java
index 0a32e83..6b2101b 100644
--- a/core/core/src/main/java/androidx/core/provider/FontProvider.java
+++ b/core/core/src/main/java/androidx/core/provider/FontProvider.java
@@ -17,6 +17,7 @@
 package androidx.core.provider;
 
 import android.annotation.SuppressLint;
+import android.content.ContentProviderClient;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.Context;
@@ -29,8 +30,9 @@
 import android.net.Uri;
 import android.os.Build;
 import android.os.CancellationSignal;
+import android.os.RemoteException;
+import android.util.Log;
 
-import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
@@ -126,6 +128,7 @@
                 .appendPath("file")
                 .build();
         Cursor cursor = null;
+        ContentQueryWrapper queryWrapper = ContentQueryWrapper.make(context, uri);
         try {
             String[] projection = {
                     FontsContractCompat.Columns._ID, FontsContractCompat.Columns.FILE_ID,
@@ -134,15 +137,8 @@
                     FontsContractCompat.Columns.WEIGHT, FontsContractCompat.Columns.ITALIC,
                     FontsContractCompat.Columns.RESULT_CODE};
 
-            ContentResolver resolver = context.getContentResolver();
-            if (Build.VERSION.SDK_INT > 16) {
-                cursor = Api16Impl.query(resolver, uri, projection, "query = ?",
+            cursor = queryWrapper.query(uri, projection, "query = ?",
                         new String[]{request.getQuery()}, null, cancellationSignal);
-            } else {
-                // No cancellation signal.
-                cursor = resolver.query(uri, projection, "query = ?",
-                        new String[]{request.getQuery()}, null);
-            }
 
             if (cursor != null && cursor.getCount() > 0) {
                 final int resultCodeColumnIndex = cursor.getColumnIndex(
@@ -182,6 +178,7 @@
             if (cursor != null) {
                 cursor.close();
             }
+            queryWrapper.close();
         }
         return result.toArray(new FontInfo[0]);
     }
@@ -227,19 +224,105 @@
         return shaList;
     }
 
-    @RequiresApi(16)
-    static class Api16Impl {
-        private Api16Impl() {
-            // This class is not instantiable.
+    /**
+     * Interface for absorbing querying ContentProvider API dependencies.
+     */
+    private interface ContentQueryWrapper {
+        Cursor query(
+                Uri uri,
+                String[] projection,
+                String selection,
+                String[] selectionArgs,
+                String sortOrder,
+                CancellationSignal cancellationSignal);
+        void close();
+
+        static ContentQueryWrapper make(Context context, Uri uri) {
+            if (Build.VERSION.SDK_INT < 16) {
+                return new ContentQueryWrapperBaseImpl(context);
+            } else if (Build.VERSION.SDK_INT < 24) {
+                return new ContentQueryWrapperApi16Impl(context, uri);
+            } else {
+                return new ContentQueryWrapperApi24Impl(context, uri);
+            }
+        }
+    }
+
+    private static class ContentQueryWrapperBaseImpl implements ContentQueryWrapper {
+        private ContentResolver mResolver;
+        ContentQueryWrapperBaseImpl(Context context) {
+            mResolver = context.getContentResolver();
         }
 
-        @SuppressWarnings("SameParameterValue")
-        @DoNotInline
-        static Cursor query(ContentResolver contentResolver, Uri uri, String[] projection,
-                String selection, String[] selectionArgs, String sortOrder,
-                Object cancellationSignal) { // Avoid implicit NewApi cast for CancellationSignal
-            return contentResolver.query(uri, projection, selection, selectionArgs, sortOrder,
-                    (CancellationSignal) cancellationSignal);
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                String sortOrder, CancellationSignal cancellationSignal) {
+            return mResolver.query(uri, projection, selection, selectionArgs, sortOrder);
+        }
+
+        @Override
+        public void close() {
+            mResolver = null;
+        }
+    }
+
+    @RequiresApi(16)
+    private static class ContentQueryWrapperApi16Impl implements ContentQueryWrapper {
+        private final ContentProviderClient mClient;
+        ContentQueryWrapperApi16Impl(Context context, Uri uri) {
+            mClient = context.getContentResolver().acquireUnstableContentProviderClient(uri);
+        }
+
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                String sortOrder, CancellationSignal cancellationSignal) {
+            if (mClient == null) {
+                return null;
+            }
+            try {
+                return mClient.query(uri, projection, selection, selectionArgs, sortOrder,
+                        cancellationSignal);
+            } catch (RemoteException e) {
+                Log.w("FontsProvider", "Unable to query the content provider", e);
+                return null;
+            }
+        }
+
+        @Override
+        public void close() {
+            if (mClient != null) {
+                mClient.release();
+            }
+        }
+    }
+
+    @RequiresApi(24)
+    private static class ContentQueryWrapperApi24Impl implements ContentQueryWrapper {
+        private final ContentProviderClient mClient;
+        ContentQueryWrapperApi24Impl(Context context, Uri uri) {
+            mClient = context.getContentResolver().acquireUnstableContentProviderClient(uri);
+        }
+
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                String sortOrder, CancellationSignal cancellationSignal) {
+            if (mClient == null) {
+                return null;
+            }
+            try {
+                return mClient.query(uri, projection, selection, selectionArgs, sortOrder,
+                        cancellationSignal);
+            } catch (RemoteException e) {
+                Log.w("FontsProvider", "Unable to query the content provider", e);
+                return null;
+            }
+        }
+
+        @Override
+        public void close() {
+            if (mClient != null) {
+                mClient.close();
+            }
         }
     }
 }
diff --git a/core/core/src/main/java/androidx/core/view/DifferentialMotionFlingHelper.java b/core/core/src/main/java/androidx/core/view/DifferentialMotionFlingController.java
similarity index 83%
rename from core/core/src/main/java/androidx/core/view/DifferentialMotionFlingHelper.java
rename to core/core/src/main/java/androidx/core/view/DifferentialMotionFlingController.java
index 66c312d..335d66c 100644
--- a/core/core/src/main/java/androidx/core/view/DifferentialMotionFlingHelper.java
+++ b/core/core/src/main/java/androidx/core/view/DifferentialMotionFlingController.java
@@ -26,7 +26,7 @@
 import androidx.annotation.VisibleForTesting;
 
 /**
- * Helper for controlling differential motion flings.
+ * Controller differential motion flings.
  *
  * <p><b>Differential motion</b> here refers to motions that report change in position instead of
  * absolution position. For instance, differential data points of 2, -1, 5 represent: there was
@@ -37,12 +37,12 @@
  * the target View (that is, the View on which we want to fling), and this class processes the event
  * to orchestrate fling.
  *
- * <p>Note that this helper class currently works to control fling only in one direction at a time.
+ * <p>Note that this class currently works to control fling only in one direction at a time.
  * As such, it works independently of horizontal/vertical orientations. It requests its client to
  * start/stop fling, and it's up to the client to choose the fling direction based on its specific
  * internal configurations and/or preferences.
  */
-public class DifferentialMotionFlingHelper {
+public class DifferentialMotionFlingController {
     private final Context mContext;
     private final DifferentialMotionFlingTarget mTarget;
 
@@ -97,47 +97,18 @@
         float getCurrentVelocity(VelocityTracker vt, MotionEvent event, int axis);
     }
 
-    /**
-     * Represents an entity that may be flung by a differential motion or an entity that initiates
-     * fling on a target View.
-     */
-    public interface DifferentialMotionFlingTarget {
-        /**
-         * Start flinging on the target View by a given velocity.
-         *
-         * @param velocity the fling velocity, in pixels/second.
-         * @return {@code true} if fling was successfully initiated, {@code false} otherwise.
-         */
-        boolean startDifferentialMotionFling(float velocity);
-
-        /** Stop any ongoing fling on the target View that is caused by a differential motion. */
-        void stopDifferentialMotionFling();
-
-        /**
-         * Returns the scaled scroll factor to be used for differential motions. This is the
-         * value that the raw {@link MotionEvent} values should be multiplied with to get pixels.
-         *
-         * <p>This usually is one of the values provided by {@link ViewConfigurationCompat}. It is
-         * up to the client to choose and provide any value as per its internal configuration.
-         *
-         * @see ViewConfigurationCompat#getScaledHorizontalScrollFactor(ViewConfiguration, Context)
-         * @see ViewConfigurationCompat#getScaledVerticalScrollFactor(ViewConfiguration, Context)
-         */
-        float getScaledScrollFactor();
-    }
-
     /** Constructs an instance for a given {@link DifferentialMotionFlingTarget}. */
-    public DifferentialMotionFlingHelper(
+    public DifferentialMotionFlingController(
             @NonNull Context context,
             @NonNull DifferentialMotionFlingTarget target) {
         this(context,
                 target,
-                DifferentialMotionFlingHelper::calculateFlingVelocityThresholds,
-                DifferentialMotionFlingHelper::getCurrentVelocity);
+                DifferentialMotionFlingController::calculateFlingVelocityThresholds,
+                DifferentialMotionFlingController::getCurrentVelocity);
     }
 
     @VisibleForTesting
-    DifferentialMotionFlingHelper(
+    DifferentialMotionFlingController(
             Context context,
             DifferentialMotionFlingTarget target,
             FlingVelocityThresholdCalculator velocityThresholdCalculator,
diff --git a/core/core/src/main/java/androidx/core/view/DifferentialMotionFlingTarget.java b/core/core/src/main/java/androidx/core/view/DifferentialMotionFlingTarget.java
new file mode 100644
index 0000000..b795604
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/view/DifferentialMotionFlingTarget.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.view;
+
+import android.content.Context;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+
+/**
+ * Represents an entity that may be flung by a differential motion or an entity that initiates
+ * fling on a target View.
+ */
+public interface DifferentialMotionFlingTarget {
+    /**
+     * Start flinging on the target View by a given velocity.
+     *
+     * @param velocity the fling velocity, in pixels/second.
+     * @return {@code true} if fling was successfully initiated, {@code false} otherwise.
+     */
+    boolean startDifferentialMotionFling(float velocity);
+
+    /** Stop any ongoing fling on the target View that is caused by a differential motion. */
+    void stopDifferentialMotionFling();
+
+    /**
+     * Returns the scaled scroll factor to be used for differential motions. This is the
+     * value that the raw {@link MotionEvent} values should be multiplied with to get pixels.
+     *
+     * <p>This usually is one of the values provided by {@link ViewConfigurationCompat}. It is
+     * up to the client to choose and provide any value as per its internal configuration.
+     *
+     * @see ViewConfigurationCompat#getScaledHorizontalScrollFactor(ViewConfiguration, Context)
+     * @see ViewConfigurationCompat#getScaledVerticalScrollFactor(ViewConfiguration, Context)
+     */
+    float getScaledScrollFactor();
+}
diff --git a/core/core/src/main/java/androidx/core/view/VelocityTrackerCompat.java b/core/core/src/main/java/androidx/core/view/VelocityTrackerCompat.java
index 4bfec10..3f20831 100644
--- a/core/core/src/main/java/androidx/core/view/VelocityTrackerCompat.java
+++ b/core/core/src/main/java/androidx/core/view/VelocityTrackerCompat.java
@@ -213,9 +213,17 @@
     }
 
     /**
-     * Return a VelocityTracker object back to be re-used by others.  You must not touch the object
-     * after calling this function. That is, don't call any methods on it, or pass it as an input to
-     * any of this class' compat APIs, as the instance is no longer valid for velocity tracking.
+     * Return a {@link VelocityTracker} object back to be re-used by others.
+     *
+     * <p>Call this method for your {@link VelocityTracker} when you have finished tracking
+     * velocity for the use-case you created this tracker for and decided that you no longer need
+     * it. This allows it to be returned back to the pool of trackers to be re-used by others.
+     *
+     * <p>You must <b>not</b> touch the object after calling this function. That is, don't call any
+     * methods on it, or pass it as an input to any of this class' compat APIs, as the instance
+     * is no longer valid for velocity tracking.
+     *
+     * @see VelocityTracker#recycle()
      */
     public static void recycle(@NonNull VelocityTracker tracker) {
         tracker.recycle();
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
index 150dcbe..084ad4c 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -744,10 +744,9 @@
         @NonNull
         @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
         public static final AccessibilityActionCompat ACTION_SCROLL_IN_DIRECTION =
-                new AccessibilityActionCompat(Build.VERSION.SDK_INT >= 34
-                        ? AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_IN_DIRECTION
-                        : null, android.R.id.accessibilityActionScrollInDirection, null, null,
-                        null);
+                new AccessibilityActionCompat(
+                        null, // Temporary to avoid weird class init issue (b/296118211)
+                        android.R.id.accessibilityActionScrollInDirection, null, null, null);
 
         final Object mAction;
         private final int mId;
diff --git a/core/core/src/main/java/androidx/core/widget/NestedScrollView.java b/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
index b2f87ab..da12fe7 100644
--- a/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
+++ b/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
@@ -56,7 +56,8 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.core.R;
 import androidx.core.view.AccessibilityDelegateCompat;
-import androidx.core.view.DifferentialMotionFlingHelper;
+import androidx.core.view.DifferentialMotionFlingController;
+import androidx.core.view.DifferentialMotionFlingTarget;
 import androidx.core.view.MotionEventCompat;
 import androidx.core.view.NestedScrollingChild3;
 import androidx.core.view.NestedScrollingChildHelper;
@@ -228,12 +229,12 @@
     private OnScrollChangeListener mOnScrollChangeListener;
 
     @VisibleForTesting
-    final DifferentialMotionFlingTarget mDifferentialMotionFlingTarget =
-            new DifferentialMotionFlingTarget();
+    final DifferentialMotionFlingTargetImpl mDifferentialMotionFlingTarget =
+            new DifferentialMotionFlingTargetImpl();
 
     @VisibleForTesting
-    DifferentialMotionFlingHelper mDifferentialMotionFlingHelper =
-            new DifferentialMotionFlingHelper(getContext(), mDifferentialMotionFlingTarget);
+    DifferentialMotionFlingController mDifferentialMotionFlingController =
+            new DifferentialMotionFlingController(getContext(), mDifferentialMotionFlingTarget);
 
     public NestedScrollView(@NonNull Context context) {
         this(context, null);
@@ -1354,7 +1355,7 @@
 
                 scrollBy(-invertedDelta, x, ViewCompat.TYPE_NON_TOUCH, isSourceMouse);
                 if (flingAxis != 0) {
-                    mDifferentialMotionFlingHelper.onMotionEvent(motionEvent, flingAxis);
+                    mDifferentialMotionFlingController.onMotionEvent(motionEvent, flingAxis);
                 }
 
                 return true;
@@ -2569,8 +2570,7 @@
         }
     }
 
-    class DifferentialMotionFlingTarget
-            implements DifferentialMotionFlingHelper.DifferentialMotionFlingTarget {
+    class DifferentialMotionFlingTargetImpl implements DifferentialMotionFlingTarget {
         @Override
         public boolean startDifferentialMotionFling(float velocity) {
             if (velocity == 0) {
diff --git a/core/settings.gradle b/core/settings.gradle
index 40cad8b..f469044 100644
--- a/core/settings.gradle
+++ b/core/settings.gradle
@@ -1,6 +1,6 @@
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/credentials/credentials/api/current.ignore b/credentials/credentials/api/current.ignore
deleted file mode 100644
index c25c22c..0000000
--- a/credentials/credentials/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-AddedMethod: androidx.credentials.provider.CallingAppInfo#isOriginPopulated():
-    Added method androidx.credentials.provider.CallingAppInfo.isOriginPopulated()
diff --git a/credentials/credentials/api/restricted_current.ignore b/credentials/credentials/api/restricted_current.ignore
deleted file mode 100644
index c25c22c..0000000
--- a/credentials/credentials/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-AddedMethod: androidx.credentials.provider.CallingAppInfo#isOriginPopulated():
-    Added method androidx.credentials.provider.CallingAppInfo.isOriginPopulated()
diff --git a/credentials/credentials/src/main/java/androidx/credentials/PrepareGetCredentialResponse.kt b/credentials/credentials/src/main/java/androidx/credentials/PrepareGetCredentialResponse.kt
index 7129ef1..6c72197 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/PrepareGetCredentialResponse.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/PrepareGetCredentialResponse.kt
@@ -174,7 +174,6 @@
         /**
          * Builds a [PrepareGetCredentialResponse].
          */
-        @SuppressLint("SyntheticAccessor")
         fun build(): androidx.credentials.PrepareGetCredentialResponse {
             return androidx.credentials.PrepareGetCredentialResponse(
                 pendingGetCredentialHandle,
@@ -217,7 +216,6 @@
         /**
          * Builds a [PrepareGetCredentialResponse].
          */
-        @SuppressLint("SyntheticAccessor")
         fun build(): androidx.credentials.PrepareGetCredentialResponse {
             return androidx.credentials.PrepareGetCredentialResponse(
                 null,
diff --git a/datastore/buildSrc b/datastore/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/datastore/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/SharedCounter.kt b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/SharedCounter.kt
index dd295be..f25b3e2 100644
--- a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/SharedCounter.kt
+++ b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/SharedCounter.kt
@@ -16,7 +16,6 @@
 
 package androidx.datastore.core
 
-import android.annotation.SuppressLint
 import android.os.ParcelFileDescriptor
 import java.io.File
 import java.io.IOException
@@ -57,7 +56,6 @@
 
         fun loadLib() = System.loadLibrary("datastore_shared_counter")
 
-        @SuppressLint("SyntheticAccessor")
         private fun createCounterFromFd(pfd: ParcelFileDescriptor): SharedCounter {
             val nativeFd = pfd.getFd()
             if (nativeSharedCounter.nativeTruncateFile(nativeFd) != 0) {
diff --git a/datastore/datastore-preferences-proto/build.gradle b/datastore/datastore-preferences-proto/build.gradle
index f599a23..e8a46b7b 100644
--- a/datastore/datastore-preferences-proto/build.gradle
+++ b/datastore/datastore-preferences-proto/build.gradle
@@ -50,8 +50,8 @@
 afterEvaluate {
     lint {
         lintOptions {
-            // protobuf generates unannotated and synthetic accessor methods
-            disable("UnknownNullness", "SyntheticAccessor")
+            // protobuf generates unannotated methods
+            disable("UnknownNullness")
         }
     }
 }
diff --git a/datastore/datastore-proto/build.gradle b/datastore/datastore-proto/build.gradle
index 658823c..a9cd4cb1 100644
--- a/datastore/datastore-proto/build.gradle
+++ b/datastore/datastore-proto/build.gradle
@@ -61,7 +61,4 @@
 
 android {
     namespace "androidx.datastore.protodatastore"
-    lintOptions {
-        disable("SyntheticAccessor")
-    }
 }
diff --git a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt
index bc1a6a1..e3cfe4c 100644
--- a/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt
+++ b/datastore/datastore-sampleapp/src/main/java/com/example/datastoresampleapp/SettingsFragment.kt
@@ -16,7 +16,6 @@
 
 package com.example.datastoresampleapp
 
-import android.annotation.SuppressLint
 import android.content.Context
 import android.os.Bundle
 import android.util.Log
@@ -83,7 +82,6 @@
     }
 
     @Suppress("OPT_IN_MARKER_ON_OVERRIDE_WARNING")
-    @SuppressLint("SyntheticAccessor")
     @ExperimentalCoroutinesApi
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
diff --git a/datastore/settings.gradle b/datastore/settings.gradle
index fe28d88..ffc0acf 100644
--- a/datastore/settings.gradle
+++ b/datastore/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
@@ -37,4 +37,3 @@
         return false
     })
 }
-
diff --git a/development/build_log_simplifier/message-flakes.ignore b/development/build_log_simplifier/message-flakes.ignore
index 82cb2a5..6a1c68d 100644
--- a/development/build_log_simplifier/message-flakes.ignore
+++ b/development/build_log_simplifier/message-flakes.ignore
@@ -152,3 +152,7 @@
 Try \./gradlew \-\-stop if this issue persists\.
 # b/ 279739438
 w\: Detected multiple Kotlin daemon sessions at kotlin/sessions
+# > Task :compose:ui:ui:compileReleaseKotlinAndroid
+e: Daemon compilation failed: Could not connect to Kotlin compile daemon
+java\.lang\.RuntimeException: Could not connect to Kotlin compile daemon
+Errors were stored into \$SUPPORT/\.gradle/kotlin/errors/errors\-[0-9]+\.log
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index cea89d3..e0af7f0 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -11,29 +11,11 @@
 Daemon will be stopped at the end of the build
 # > Configure project :appsearch:appsearch\-local\-backend
 Configuration on demand is an incubating feature\.
-Calculating task graph as configuration cache cannot be reused because an input to ClasspathEntrySnapshotTransform\: \$OUT_DIR\/buildSrc\/jetpad\-integration\/build\/libs\/jetpad\-integration\.jar has changed\.
-Calculating task graph as configuration cache cannot be reused because the set of Gradle properties has changed\.
-You are using legacy USE_ANDROIDX_REMOTE_BUILD_CACHE=true type, this cache has been turned down, so you are \*not\* using a remote cache\. Please move to the new cache using http://go/androidx\-dev\#remote\-build\-cache
-# > Configure project :compose:test\-utils
-# https://youtrack.jetbrains.com/issue/KT-48436
-The following Kotlin source sets were configured but not added to any Kotlin compilation:
-\* androidAndroidTestDebug
-\* androidAndroidTestRelease
-\* androidTestFixtures
-\* androidTestFixturesDebug
-\* androidTestFixturesRelease
-\* androidTestRelease
-You can add a source set to a target's compilation by connecting it with the compilation's default source set using 'dependsOn'\.
-See https://kotlinlang\.org/docs/reference/building\-mpp\-with\-gradle\.html\#connecting\-source\-sets
 # > Task :listTaskOutputs
-Wrote \$DIST_DIR/task_outputs\.txt
 Deprecated Gradle features were used in this build, making it incompatible with Gradle [0-9]+\.[0-9]+\.
-See https://docs.gradle.org/.*/userguide/command_line_interface\.html#sec:command_line_warnings
 BUILD SUCCESSFUL in .*
 # > Task :doclava:compileJava
 Note\: Some input files use or override a deprecated API\.
-Note: Some input files use or override a deprecated API that is marked for removal\.
-Note: Recompile with \-Xlint:removal for details\.
 Note\: Some input files use unchecked or unsafe operations\.
 Note\: Recompile with \-Xlint\:unchecked for details\.
 # > Task :ui:ui-tooling:processDebugAndroidTestManifest
@@ -41,15 +23,10 @@
 \$OUT_DIR/androidx/benchmark/integration\-tests/dry\-run\-benchmark/build/intermediates/tmp/manifest/androidTest/release/tempFile[0-9]+ProcessTestManifest[0-9]+\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
 # > Task :compose:runtime:runtime-saveable:processDebugAndroidTestManifest
 \$SUPPORT/compose/runtime/runtime\-saveable/src/androidAndroidTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
-# Usage of android.overrideVersionCheck
-Minimum supported Gradle version is [0-9]+\.[0-9]+\. Current version is [0-9]+\.[0-9]+\. If using the gradle wrapper\, try editing the distributionUrl in \$SUPPORT\/gradle\/wrapper\/gradle\-wrapper\.properties to gradle.*
-As android\.overrideVersionCheck is set, continuing anyway\.
 # > Task :buildOnServer
 [0-9]+ actionable tasks: [0-9]+ executed, [0-9]+ up\-to\-date
-Configuration cache entry reused with [0-9]+ problems\.
 See the profiling report at: file://\$GRADLE_USER_HOME/daemon/.*/reports/profile/profile\-[0-9]+\-[0-9]+\-[0-9]+\-[0-9]+\-[0-9]+\-[0-9]+\.html
 Configuration cache entry reused\.
-Configuration cache entry stored with [0-9]+ problem.*
 [0-9]+ actionable tasks: [0-9]+ executed, [0-9]+ from cache
 Configuration cache entry stored\.
 See the profiling report at\: file\:\/\/\$OUT_DIR\/androidx\/build\/reports\/profile\/profile\-[0-9]+\-[0-9]+\-[0-9]+\-[0-9]+\-[0-9]+\-[0-9]+\.html
@@ -64,26 +41,15 @@
 # > Task :activity:integration-tests:testapp:processDebugAndroidTestManifest
 # b/166471969
 \$SUPPORT/benchmark/integration\-tests/dry\-run\-benchmark/src/androidTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
-# > Task :compose:material:material:icons:generator:zipHtmlResultsOfTest
-Html results of .* zipped into.*\.zip
 # b/230127926
 [0-9]+ problem.* found storing the configuration cache.*
-See https://docs\.gradle\.org/[0-9]+\.[0-9]+/userguide/configuration_cache\.html\#config_cache:requirements:task_access
-plus [0-9]+ more problems\. Please see the report for details\.
-See https\:\/\/docs\.gradle\.org\/[0-9]+\.[0-9]+.*\/userguide\/configuration_cache\.html\#config_cache\:requirements\:disallowed_types
-See the complete report at file://\$SUPPORT/build/reports/configuration\-cache/[^/]*/[^/]*/configuration\-cache\-report\.html
 See the complete report at file://\$OUT_DIR/androidx/build/reports/configuration\-cache/[^ ]*/[^ ]*/configuration\-cache\-report\.html
 # > Task :compose:ui:ui:processDebugAndroidTestManifest
-\$OUT_DIR/.*/tempFile[0-9]+ProcessTestManifest[0-9]+\.xml Warning:
-Namespace 'androidx\..*' used in: tempFile[0-9]+ProcessTestManifest[0-9]+\.xml, :.*
 \$OUT_DIR/androidx/compose/runtime/runtime\-saveable/build/intermediates/tmp/manifest/androidTest/debug/tempFile[0-9]+ProcessTestManifest[0-9]+\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
 \$OUT_DIR/androidx/compose/ui/ui\-tooling/build/intermediates/tmp/manifest/androidTest/debug/tempFile[0-9]+ProcessTestManifest[0-9]+\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
 # > Task :buildSrc:build UP-TO-DATE
 A fine\-grained performance profile is available\: use the \-\-scan option\.
-# > Task :viewpager2:viewpager2:compileDebugAndroidTestKotlin
-w\: \$SUPPORT\/viewpager[0-9]+\/viewpager[0-9]+\/src\/androidTest\/java\/androidx\/viewpager[0-9]+\/widget\/HostFragmentBackStackTest\.kt\: \([0-9]+\, [0-9]+\)\: \'enableDebugLogging\(Boolean\)\: Unit\' is deprecated\. Deprecated in Java
 # > Task :docs
-ERROR: An attempt to write .*
 WARN: Failed to resolve `@see <a href="http:\/\/developer\.android\.com\/design\/patterns\/navigation-drawer\.html">Navigation`! In in declaration of DrawerActions in file .*\/androidx\/test\/espresso\/contrib\/DrawerActions\.java at line 41\.
 WARN: Failed to resolve `@see <a href="http:\/\/developer\.android\.com\/guide\/topics\/ui\/controls\/pickers\.html">Pickers API`! In in declaration of PickerActions in file .*\/androidx\/test\/espresso\/contrib\/PickerActions\.java at line 35\.
 WARN: Failed to resolve `@see <a href="https:\/\/developer\.android\.com\/guide\/topics\/media\/media-routing">Media Routing<\/a>`! In in declaration of SystemOutputSwitcherDialogController in file .*\/androidx\/mediarouter\/app\/SystemOutputSwitcherDialogController\.java at line 39\.
@@ -141,8 +107,7 @@
 WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of getChangesToken in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 151\.
 WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of insertRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt at line 104\.
 WARN: Link to @throws type RemoteException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any IPC transportation failures\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=RemoteException, exceptionAddress=null\) in in declaration of readRecords in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientImpl\.kt, line number could not be determined\.
-WARN: Link to @throws type Renderer\.GlesException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=If any GL calls fail during initialization\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=Renderer\.GlesException, exceptionAddress=null\) in in declaration of GlesRenderer2 in file .*\/androidx\/wear\/watchface\/Renderer\.kt at line 1648\.
-WARN: Link to @throws type Renderer\.GlesException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=If any GL calls fail during initialization\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=Renderer\.GlesException, exceptionAddress=null\) in in declaration of GlesRenderer2 in file .*\/androidx\/wear\/watchface\/Renderer\.kt at line 1686\.
+WARN: Link to @throws type Renderer\.GlesException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=If any GL calls fail during initialization\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=Renderer\.GlesException, exceptionAddress=null\) in in declaration of GlesRenderer2 in file .*\/androidx\/wear\/watchface\/Renderer\.kt at line .*\.
 WARN: Link to @throws type ServiceStartFailureException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the watchface dies during startup\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ServiceStartFailureException, exceptionAddress=null\) in in declaration of getOrCreateInteractiveWatchFaceClient in file .*\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt at line 258\.
 WARN: Link to @throws type ServiceStartFailureException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if the watchface dies during startup\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=ServiceStartFailureException, exceptionAddress=null\) in in declaration of getOrCreateInteractiveWatchFaceClient in file .*\/androidx\/wear\/watchface\/client\/ListenableWatchFaceControlClient\.kt at line 305\.
 WARN: Link to @throws type UnsupportedDeviceOperationException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=if used on a real device\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=UnsupportedDeviceOperationException, exceptionAddress=null\) in in declaration of setBookMode in file .*\/androidx\/test\/espresso\/device\/action\/DeviceActions\.kt at line 58\.
@@ -165,7 +130,6 @@
 WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setEnterSharedElementCallback\/#android\.app\.Activity#androidx\.core\.app\.SharedElementCallback\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setExitSharedElementCallback\/#android\.app\.Activity#androidx\.core\.app\.SharedElementCallback\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `activity` of function androidx\.core\.app\/ActivityCompat\/setLocusContext\/#android\.app\.Activity#androidx\.core\.content\.LocusIdCompat#android\.os\.Bundle\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app\/ActivityScenario\/launch\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration
 WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app\/ActivityScenario\/launch\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.core\.app\/ActivityScenario\/launchActivityForResult\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `activityClass` of function androidx\.test\.ext\.junit\.rules\/ActivityScenarioRule\/ActivityScenarioRule\/#java\.lang\.Class<A>#android\.os\.Bundle\/PointingToDeclaration\/
@@ -224,7 +188,6 @@
 WARN: Missing @param tag for parameter `button` of function androidx\.core\.widget\/CompoundButtonCompat\/setButtonTintList\/#android\.widget\.CompoundButton#android\.content\.res\.ColorStateList\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `button` of function androidx\.core\.widget\/CompoundButtonCompat\/setButtonTintMode\/#android\.widget\.CompoundButton#android\.graphics\.PorterDuff\.Mode\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `c` of function androidx\.cursoradapter\.widget\/ResourceCursorAdapter\/ResourceCursorAdapter\/#android\.content\.Context#int#android\.database\.Cursor\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `callback` of function androidx\.core\.os\/HandlerCompat\/createAsync\/#android\.os\.Looper#android\.os\.Handler\.Callback\/PointingToDeclaration
 WARN: Missing @param tag for parameter `callback` of function androidx\.core\.os\/HandlerCompat\/createAsync\/#android\.os\.Looper#android\.os\.Handler\.Callback\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `carContext` of function androidx\.car\.app\/CarToast\/makeText\/#androidx\.car\.app\.CarContext#int#int\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `carContext` of function androidx\.car\.app\/CarToast\/makeText\/#androidx\.car\.app\.CarContext#java\.lang\.CharSequence#int\/PointingToDeclaration\/
@@ -310,7 +273,6 @@
 WARN: Missing @param tag for parameter `context` of function androidx\.documentfile\.provider\/DocumentFile\/fromSingleUri\/#android\.content\.Context#android\.net\.Uri\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `context` of function androidx\.documentfile\.provider\/DocumentFile\/fromTreeUri\/#android\.content\.Context#android\.net\.Uri\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `context` of function androidx\.graphics\.opengl\.egl\/EGLSpec\/eglMakeCurrent\/#android\.opengl\.EGLContext#android\.opengl\.EGLSurface#android\.opengl\.EGLSurface\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `context` of function androidx\.graphics\.opengl\.egl\/EGLSpec\/eglMakeCurrent\/#android\.opengl\.EGLContext#android\.opengl\.EGLSurface#android\.WARN: Link to @throws type IOException does not resolve\. Is it from a package that the containing file does not import\? Is docs inherited to an un-documented override function, but the exception class is not in scope in the inheriting class\? .*The general fix for these is to fully qualify the exception name,  e\.g\.`@throws java\.io\.IOException under some conditions`\. This was observed in Throws\(root=CustomDocTag\(children=\[P\(children=\[Text\(body=For any disk I\/O issues\., children=\[\], params={}\)\], params={}\)\], params={}, name=MARKDOWN_FILE\), name=IOException, exceptionAddress=null\) in in declaration of aggregate in file .*\/androidx\/health\/connect\/client\/impl\/HealthConnectClientUpsideDownImpl\.kt at line 202\.
 WARN: Missing @param tag for parameter `context` of function androidx\.mediarouter\.media\/RemotePlaybackClient\/RemotePlaybackClient\/#android\.content\.Context#androidx\.mediarouter\.media\.MediaRouter\.RouteInfo\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/\/EncryptedSharedPreferences\/#android\.content\.Context#kotlin\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `context` of function androidx\.security\.crypto\/EncryptedSharedPreferences\/create\/#android\.content\.Context#java\.lang\.String#androidx\.security\.crypto\.MasterKey#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefKeyEncryptionScheme#androidx\.security\.crypto\.EncryptedSharedPreferences\.PrefValueEncryptionScheme\/PointingToDeclaration\/
@@ -457,7 +419,6 @@
 WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/ListUpdateCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedList\.BatchedCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedList\.Callback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
-WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedListAdapterCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration
 WARN: Missing @param tag for parameter `payload` of function androidx\.recyclerview\.widget\/SortedListAdapterCallback\/onChanged\/#int#int#java\.lang\.Object\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `phase` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float\/PointingToDeclaration\/
 WARN: Missing @param tag for parameter `phase` of function androidx\.constraintlayout\.core\.motion\.utils\/KeyCycleOscillator\/setPoint\/#int#int#java\.lang\.String#int#float#float#float#float#java\.lang\.Object\/PointingToDeclaration\/
@@ -688,13 +649,8 @@
 WARN: Unable to find what is referred to by "@param supportedTypes" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 682\.
 WARN: Unable to find what is referred to by "@param supportedTypes" in DClass Builder\. Did you make a typo\? Are you trying to refer to something not visible to users\? in declaration of Builder in file .*\/androidx\/wear\/watchface\/ComplicationSlot\.kt at line 686\.
 WARN: Use @androidx\.annotation\.Nullable, not @org\.checkerframework\.checker\.nullness\.qual\/Nullable\/\/\/PointingToDeclaration\/
-# Wire proto generation, task :generateDebugProtos
-Writing .* to \$OUT_DIR/.*/build/generated/source/wire
 # > Task :compose:ui:ui-tooling:processDebugAndroidTestManifest
 \$SUPPORT/compose/ui/ui\-tooling/src/androidAndroidTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
-dagger\.lint\.DaggerIssueRegistry in .*/lint\.jar does not specify a vendor; see IssueRegistry#vendor
-# > Task :jvmSourcesJar
-Encountered duplicate path \"jvmMain(\/([a-zA-Z]+))+(\.jvm)?\.kt\" during copy operation configured with DuplicatesStrategy.WARN
 # ./gradlew tasks warns as we have warnings present
 You can use \'\-\-warning\-mode all\' to show the individual deprecation warnings and determine if they come from your own scripts or plugins\.
 For more on this\, please refer to https\:\/\/docs\.gradle\.org\/.*\/userguide\/command_line_interface\.html\#sec\:command_line_warnings in the Gradle documentation\.
@@ -709,7 +665,6 @@
 C/C\+\+: Building ver\.\: [0-9]+\.[0-9]+\.[0-9]+
 C/C\+\+: Packaging for\: (amd\-[0-9]+|armhf\-[0-9]+|x86\-[0-9]+)
 C/C\+\+: Compiling for ARM
-w: \[ksp\] Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\. \- androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameDb\.jvmDao\(\)
 w: \[ksp\] \$SUPPORT/room/integration\-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/JvmNameInDaoTest\.kt:[0-9]+: Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\.
 # > Task :room:integration-tests:room-testapp-kotlin:kaptWithKaptDebugAndroidTestKotlin
 \$OUT_DIR/androidx/room/integration\-tests/room\-testapp\-kotlin/build/tmp/kapt[0-9]+/stubs/withKaptDebugAndroidTest/androidx/room/integration/kotlintestapp/test/JvmNameInDaoTest\.java:[0-9]+: warning: Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\.
@@ -718,42 +673,19 @@
 public abstract java\.util\.List<androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameEntity> jvmQuery\(\);
 public abstract androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameDao jvmDao\(\);
 \^
+# b/296419682
+\$SUPPORT/concurrent/concurrent\-futures/src/test/java/androidx/concurrent/futures/AbstractResolvableFutureTest\.java:[0-9]+: warning: \[removal\] resume\(\) in Thread has been deprecated and marked for removal
+thread\.resume\(\);
+# > Task :concurrent:concurrent-futures:compileTestJava
+\$SUPPORT/concurrent/concurrent\-futures/src/test/java/androidx/concurrent/futures/AbstractResolvableFutureTest\.java:[0-9]+: warning: \[removal\] suspend\(\) in Thread has been deprecated and marked for removal
+thread\.suspend\(\);
 [0-9]+ warnings
-# Gradle will log if you are not authenticated to upload scans
-A build scan was not published as you have not authenticated with server 'ge\.androidx\.dev'\.
-For more information, please see https://gradle\.com/help/gradle\-authenticating\-with\-gradle\-enterprise\.
-# Room unresolved type error messages
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$createFromAsset\(kotlin\.String\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$createFromAsset\(kotlin\.String\,\ androidx\.room\.RoomDatabase\.PrepackagedDatabaseCallback\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$createFromFile\(java\.io\.File\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$createFromFile\(java\.io\.File\,\ androidx\.room\.RoomDatabase\.PrepackagedDatabaseCallback\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$createFromInputStream\(java\.util\.concurrent\.Callable\(\(java\.io\.InputStream\)\)\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$createFromInputStream\(java\.util\.concurrent\.Callable\(\(java\.io\.InputStream\)\), androidx\.room\.RoomDatabase\.PrepackagedDatabaseCallback\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$openHelperFactory\(androidx\.sqlite\.db\.SupportSQLiteOpenHelper\.Factory\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$addMigrations\(kotlin\.Array\(\(androidx\.room\.migration\.Migration\)\)\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$addAutoMigrationSpec\(androidx\.room\.migration\.AutoMigrationSpec\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$allowMainThreadQueries\(\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$setJournalMode\(androidx\.room\.RoomDatabase\.JournalMode\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$setQueryExecutor\(java\.util\.concurrent\.Executor\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$setTransactionExecutor\(java\.util\.concurrent\.Executor\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$enableMultiInstanceInvalidation\(\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$setMultiInstanceInvalidationServiceIntent\(android\.content\.Intent\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$fallbackToDestructiveMigration\(\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$fallbackToDestructiveMigrationFrom\(kotlin\.IntArray\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$fallbackToDestructiveMigrationOnDowngrade\(\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$addCallback\(androidx\.room\.RoomDatabase\.Callback\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$setQueryCallback\(androidx\.room\.RoomDatabase\.QueryCallback, java\.util\.concurrent\.Executor\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$addTypeConverter\(kotlin\.Any\) \(RoomDatabase\.kt:[0-9]+\)
-Found an unresolved type in androidx\.room\.RoomDatabase\.Builder\$setAutoCloseTimeout\(kotlin\.Long, java\.util\.concurrent\.TimeUnit\) \(RoomDatabase\.kt:[0-9]+\)
-# > Task :compose:ui:ui:compileReleaseKotlin
-w: \$SUPPORT/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat\.android\.kt: \([0-9]+, [0-9]+\): Unnecessary non\-null assertion \(!!\) on a non\-null receiver of type LayoutNode
 # When konan is downloading a dependency from another file, don't warn about it.
 \(KonanProperies\) Downloading dependency: file:\.\./\.\./.*
 Please wait while Kotlin/Native compiler .* is being installed\.
 Unpack Kotlin/Native compiler to .*
 Download file:\.\./\.\./.*
 Download kotlin\-native\-prebuilt\-.*.gz finished\, took [0-9]+ s [0-9]+ ms
-Download kotlin\-native\-prebuilt\-.*.gz finished\, took [0-9]+ ms
 Downloading native dependencies \(LLVM, sysroot etc\)\. This is a one\-time action performed only on the first run of the compiler\.
 Extracting dependency: .*\.konan/cache.*
 # > Task :commonizeNativeDistribution
@@ -761,46 +693,20 @@
 # see: https://github.com/JetBrains/kotlin/blob/master/native/commonizer/README.md
 # This warning is printed from: https://github.com/JetBrains/kotlin/blob/bc853e45e8982eff74e3263b0197c1af6086615d/native/commonizer/src/org/jetbrains/kotlin/commonizer/konan/LibraryCommonizer.kt#L41
 Warning\: No libraries found for target (macos|ios|ios_simulator)_(arm|x)[0-9]+\. This target will be excluded from commonization\.
-void androidx.tv.foundation.lazy.list.LazyListKt.LazyList(androidx.compose.ui.Modifier, androidx.tv.foundation.lazy.list.TvLazyListState, androidx.compose.foundation.layout.PaddingValues, boolean, boolean, boolean, androidx.tv.foundation.PivotOffsets, androidx.compose.ui.Alignment$Horizontal, androidx.compose.foundation.layout.Arrangement$Vertical, androidx.compose.ui.Alignment$Vertical, androidx.compose.foundation.layout.Arrangement$Horizontal, kotlin.jvm.functions.Function1, androidx.compose.runtime.Composer, int, int, int)
-void androidx.tv.foundation.lazy.grid.LazyGridKt.LazyGrid(androidx.compose.ui.Modifier, androidx.tv.foundation.lazy.grid.TvLazyGridState, kotlin.jvm.functions.Function2, androidx.compose.foundation.layout.PaddingValues, boolean, boolean, boolean, androidx.compose.foundation.layout.Arrangement$Vertical, androidx.compose.foundation.layout.Arrangement$Horizontal, androidx.tv.foundation.PivotOffsets, kotlin.jvm.functions.Function1, androidx.compose.runtime.Composer, int, int, int)
-# > Task :room:integration-tests:room-testapp:mergeDexWithExpandProjectionDebugAndroidTest
-WARNING:D[0-9]+: Application does not contain `androidx\.tracing\.Trace` as referenced in main\-dex\-list\.
 # > Task :hilt:hilt-compiler:kaptTestKotlin
 Annotation processors discovery from compile classpath is deprecated\.
 Set 'kapt\.include\.compile\.classpath=false' to disable discovery\.
 Run the build with '\-\-info' for more details\.
-# AGP warning about API usage we have no control over
-Values of variant API AnnotationProcessorOptions\.arguments are queried and may return non final values, this is unsupported
 # > Task :compose:ui:ui:testDebugUnitTest
 (OpenJDK 64\-Bit Server VM warning:.*|.*Sharing is only supported for boot loader classes because bootstrap classpath has been appended)
-# > Task :concurrent:concurrent-futures:compileTestJava b/242311027
-\$SUPPORT/concurrent/concurrent\-futures/src/test/java/androidx/concurrent/futures/AbstractResolvableFutureTest\.java:[0-9]+: warning: \[removal\] (resume|suspend)\(\) in Thread has been deprecated and marked for removal
-thread\.(resume|suspend)\(\);
-# AGP warning that will go away soon
-WARNING:Software Components will not be created automatically for Maven publishing from Android Gradle Plugin 8\.0\. To opt\-in to the future behavior, set the Gradle property android\.disableAutomaticComponentCreation=true in the `gradle\.properties` file or use the new publishing DSL\.
-# > Task :graphics:graphics-path:compileDebugKotlin
-w\: \$SUPPORT\/graphics\/graphics\-path\/src\/main\/java\/androidx\/graphics\/path\/Paths\.kt\: \([0-9]+\, [0-9]+\)\: Extension is shadowed by a member\: public open fun iterator\(\)\: PathIterator
-# > Task :core:core-splashscreen:core-splashscreen-samples:lintReportDebug
-Warning: Lint will treat :annotation:annotation as an external dependency and not analyze it\.
-Did you make a typo\? Are you trying to refer to something not visible to users\?
-\* Recommended Action: Apply the 'com\.android\.lint' plugin to java library project :annotation:annotation\. to enable lint to analyze those sources\.
-# > Task :linkDebugTestIosX64 b/253041601
-w: Cached libraries will not be used with std allocator
-# cinterop warnings we have no control over.
-objc\[.*\]: Class .*
 # KMP messages on successful XCFramework builds.
 xcframework successfully .*
 # Building XCFrameworks (b/260140834) and iOS benchmark invocation
-Observed package id 'platforms;android-33-ext5' in inconsistent location.*
 .*xcodebuild.*
 # > Task :core:core:compileDebugAndroidTestKotlin
 w: file://\$SUPPORT/core/core/src/androidTest/java/androidx/core/util/TypedValueCompatTest\.kt:[0-9]+:[0-9]+ 'scaledDensity: Float' is deprecated\. Deprecated in Java
 # > Task :compose:foundation:foundation:processDebugAndroidTestManifest
 \$SUPPORT/compose/foundation/foundation/src/androidAndroidTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
-# > Task :camera:camera-video:compileDebugAndroidTestKotlin
-w: file://\$SUPPORT/camera/camera\-video/src/androidTest/java/androidx/camera/video/internal/audio/AudioStreamImplTest\.kt:[0-9]+:[0-9]+ 'RequiresDevice' is deprecated\. Deprecated in Java
-# > Task :benchmark:benchmark-macro:compileDebugAndroidTestKotlin
-w: file://\$SUPPORT/benchmark/benchmark\-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkScopeTest\.kt:[0-9]+:[0-9]+ 'RequiresDevice' is deprecated\. Deprecated in Java
 # > Task :graphics:graphics-core:compileDebugAndroidTestKotlin
 w: file://\$SUPPORT/graphics/graphics\-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest\.kt:[0-9]+:[0-9]+ 'RequiresDevice' is deprecated\. Deprecated in Java
 w: file://\$SUPPORT/graphics/graphics\-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest\.kt:[0-9]+:[0-9]+ 'RequiresDevice' is deprecated\. Deprecated in Java
@@ -821,4 +727,6 @@
 # > Task :compose:ui:ui:compileReleaseKotlinAndroid
 e: Daemon compilation failed: Could not connect to Kotlin compile daemon
 java\.lang\.RuntimeException: Could not connect to Kotlin compile daemon
-Errors were stored into \$SUPPORT/\.gradle/kotlin/errors/errors\-[0-9]+\.log
\ No newline at end of file
+Errors were stored into \$SUPPORT/\.gradle/kotlin/errors/errors\-[0-9]+\.log
+# > Task :vectordrawable:integration-tests:testapp:createReleaseCompatibleScreenManifests
+exception: info: \[ksp\] loaded provider\(s\): \[androidx\.room\.RoomKspProcessor\$Provider\]
diff --git a/development/gradleProfiler/README.md b/development/gradleProfiler/README.md
new file mode 100644
index 0000000..34f92d7
--- /dev/null
+++ b/development/gradleProfiler/README.md
@@ -0,0 +1,20 @@
+# Profiling AndroidX Gradle configuration phase
+
+1. Check out [gradle-profiler](https://github.com/gradle/gradle-profiler)
+2. Build it with `./gradlew installDist`
+3. Run the following:
+```bash
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/yourkit/bin/linux-x86-64/ \
+    YOURKIT_HOME=~/yourkit/ \
+    JAVA_TOOLS_JAR=/path/to/androidx/prebuilts/jdk/jdk8/linux-x86/lib/tools.jar \
+    JAVA_HOME=/path/to/androidx/prebuilts/jdk/jdk17/linux-x86/ \
+    ./build/install/gradle-profiler/bin/gradle-profiler \
+    --profile yourkit \
+    --project-dir /path/to/androidx/frameworks/support/ \
+    --gradle-user-home my-gradle-user-home \
+    --scenario-file /path/to/androidx/frameworks/support/development/gradleProfiler/configuration.scenarios \
+    rerunDryRun
+```
+
+This will produce a `.snapshot` file that you can open in YourKit profiler for
+analysis.
\ No newline at end of file
diff --git a/development/gradleProfiler/configuration.scenarios b/development/gradleProfiler/configuration.scenarios
new file mode 100644
index 0000000..5f74713
--- /dev/null
+++ b/development/gradleProfiler/configuration.scenarios
@@ -0,0 +1,7 @@
+rerunDryRun {
+    tasks = ["bOS"]
+    gradle-args = ["--dry-run", "--rerun-tasks"]
+    daemon = cold
+    warm-ups = 1
+    clear-configuration-cache-state-before = BUILD
+}
diff --git a/development/plot-benchmarks/src/transforms/data-transforms.ts b/development/plot-benchmarks/src/transforms/data-transforms.ts
index daadebb..c176da9 100644
--- a/development/plot-benchmarks/src/transforms/data-transforms.ts
+++ b/development/plot-benchmarks/src/transforms/data-transforms.ts
@@ -1,10 +1,12 @@
-import type { ChartDataset, ChartType, Point } from "chart.js";
+import type { ChartDataset, ChartType } from "chart.js";
 import type { Data, Series } from "../types/chart.js";
-import type { Metric, Metrics } from "../types/data.js";
+import type { Metric, Metrics, Range } from "../types/data.js";
 
 export interface Mapper<T = number> {
+  rangeLabel: (metric: Metric<unknown>) => string;
+  sampledRanges: (metrics: Metrics<T>) => Record<string, Range>;
   standard: (value: Metric<T>) => Series[];
-  sampled: (value: Metric<T[]>) => Series[];
+  sampled: (value: Metric<T[]>, range: Range | null) => Series[];
 }
 
 /**
@@ -16,6 +18,8 @@
     const series: Series[] = [];
     const standard = metrics.standard;
     const sampled = metrics.sampled;
+    // Builds ranges for distribution
+    const ranges = mapper.sampledRanges(metrics);
     if (standard) {
       for (let i = 0; i < standard.length; i += 1) {
         const metric = standard[i];
@@ -26,7 +30,7 @@
     if (sampled) {
       for (let i = 0; i < sampled.length; i += 1) {
         const metric = sampled[i];
-        const mapped = mapper.sampled(metric);
+        const mapped = mapper.sampled(metric, ranges[mapper.rangeLabel(metric)]);
         series.push(...mapped);
       }
     }
diff --git a/development/plot-benchmarks/src/transforms/standard-mappers.ts b/development/plot-benchmarks/src/transforms/standard-mappers.ts
index b7140a7..11baf19 100644
--- a/development/plot-benchmarks/src/transforms/standard-mappers.ts
+++ b/development/plot-benchmarks/src/transforms/standard-mappers.ts
@@ -1,16 +1,50 @@
 import type { Point } from "chart.js";
 import type { Series } from "../types/chart.js";
-import type { ChartData, Metric } from "../types/data.js";
+import type { ChartData, Metric, Metrics, Range } from "../types/data.js";
 import type { Mapper } from "./data-transforms.js";
 
-function sampledMapper(metric: Metric<number[]>): Series[] {
+function sampledRanges(metrics: Metrics<number>): Record<string, Range> {
+  const ranges: Record<string, Range> = {};
+  const sampled = metrics.sampled;
+  if (sampled) {
+    for (let i = 0; i < sampled.length; i += 1) {
+      const metric = sampled[i];
+      const label = rangeLabel(metric);
+      let range = ranges[label];
+      if (!range) {
+        range = {
+          label: label,
+          min: Number.MAX_VALUE,
+          max: Number.MIN_VALUE
+        };
+      }
+      const data: Record<string, ChartData<number[]>> = metric.data;
+      const chartData: ChartData<number[]>[] = Object.values(data);
+      for (let j = 0; j < chartData.length; j++) {
+        const values = chartData[j].values.flat();
+        for (let k = 0; k < values.length; k++) {
+          if (values[k] < range.min) {
+            range.min = values[k];
+          }
+          if (values[k] > range.max) {
+            range.max = values[k];
+          }
+        }
+      }
+      ranges[label] = range;
+    }
+  }
+  return ranges;
+}
+
+function sampledMapper(metric: Metric<number[]>, range: Range | null): Series[] {
   const series: Series[] = [];
   const data: Record<string, ChartData<number[]>> = metric.data;
   const entries = Object.entries(data);
   for (let i = 0; i < entries.length; i += 1) {
     const [source, chartData] = entries[i];
     const label = labelFor(metric, source);
-    const [points, _, __] = histogramPoints(chartData.values);
+    const [points, _, __] = histogramPoints(chartData.values, /* buckets */ undefined, /* target */ undefined, range);
     series.push({
       label: label,
       type: "line",
@@ -45,26 +79,40 @@
 
 export function histogramPoints(
   runs: number[][],
-  buckets: number = 10,
-  target: number | null = null
+  buckets: number = 100,
+  target: number | null = null,
+  range: Range | null = null,
 ): [Point[], Point[] | null, number | null] {
   const flattened = runs.flat();
-  // Default comparator coerces types to string !
-  flattened.sort((a, b) => a - b); // in-place
-  const min = flattened[0];
-  const max = flattened[flattened.length - 1];
+  // Actuals
+  let min: number;
+  let max: number;
+  if (range) {
+    min = range.min;
+    max = range.max;
+  } else {
+    // Use a custom comparator, given the default coerces numbers
+    // to a string type.
+    flattened.sort((a, b) => a - b);
+    // Natural Ranges
+    const nmin = flattened[0];
+    const nmax = flattened[flattened.length - 1];
+    min = nmin;
+    max = nmax;
+  }
   let targetPoints: Point[] | null = null;
   let pMin: number = 0;
   let pMax: number = 0;
   let maxFreq: number = 0;
   const histogram = new Array(buckets).fill(0);
-  const slots = buckets - 1; // The actual number of slots in the histogram
+  // The actual number of slots in the histogram
+  const slots = buckets - 1;
   for (let i = 0; i < flattened.length; i += 1) {
     const value = flattened[i];
-    if (value < target) {
+    if (target && value < target) {
       pMin += 1;
     }
-    if (value >= target) {
+    if (target && value >= target) {
       pMax += 1;
     }
     const n = normalize(value, min, max);
@@ -117,7 +165,13 @@
       n = max;
     }
   }
-  return (n - min) / (max - min + 1e-5);
+  return (n - min) / ((max - min) + 1e-9);
+}
+
+function interpolate(normalized: number, min: number, max: number) {
+  const range = max - min;
+  const value = normalized * range;
+  return value + min;
 }
 
 /**
@@ -132,9 +186,19 @@
 }
 
 /**
+ * Helps build cache keys for ranges to ensure we are
+ * comparing equal distributions.
+ */
+function rangeLabel(metric: Metric<unknown>): string {
+  return `${metric.benchmark}>${metric.label}`;
+}
+
+/**
  * The standard mapper.
  */
 export const STANDARD_MAPPER: Mapper = {
+  rangeLabel: rangeLabel,
   standard: standardMapper,
-  sampled: sampledMapper
+  sampled: sampledMapper,
+  sampledRanges: sampledRanges
 };
diff --git a/development/plot-benchmarks/src/types/data.ts b/development/plot-benchmarks/src/types/data.ts
index 6e6955c..204070f 100644
--- a/development/plot-benchmarks/src/types/data.ts
+++ b/development/plot-benchmarks/src/types/data.ts
@@ -8,6 +8,15 @@
 }
 
 /**
+ * Keeps track of ranges for various metrics. So distributions have a consistent range.
+ */
+export interface Range {
+  label: string;
+  min: number;
+  max: number;
+}
+
+/**
  * A container for a Metric.
  *
  * This metric has all relevant comparables, in the data keyed by the source.
diff --git a/development/plot-benchmarks/src/workers/service.ts b/development/plot-benchmarks/src/workers/service.ts
index 34cb393..90ff9a5 100644
--- a/development/plot-benchmarks/src/workers/service.ts
+++ b/development/plot-benchmarks/src/workers/service.ts
@@ -27,7 +27,7 @@
                 continue;
               }
               const [delta, distribution] = this.buildDistribution(reference, target);
-              const [points, pPlots, p] = histogramPoints([distribution], 20, delta);
+              const [points, pPlots, p] = histogramPoints([distribution], 100, delta);
               series.push({
                 label: `${name} { ${metric.label} } - Likelihood`,
                 type: "line",
@@ -67,7 +67,7 @@
                 continue;
               }
               const [delta, distribution] = this.buildStandardDistribution(reference, target);
-              const [points, pPlots, p] = histogramPoints([distribution], 20, delta);
+              const [points, pPlots, p] = histogramPoints([distribution], 100, delta);
               series.push({
                 label: `${name} { ${metric.label} } - Likelihood`,
                 type: "line",
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index b435468..d255123 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -384,6 +384,7 @@
     docs("androidx.wear.compose:compose-ui-tooling:1.3.0-alpha03")
     docs("androidx.wear.protolayout:protolayout:1.0.0")
     docs("androidx.wear.protolayout:protolayout-expression:1.0.0")
+    docs("androidx.wear.protolayout:protolayout-expression-pipeline:1.0.0")
     docs("androidx.wear.protolayout:protolayout-material:1.0.0")
     docs("androidx.wear.protolayout:protolayout-renderer:1.0.0")
     docs("androidx.wear.tiles:tiles:1.2.0")
diff --git a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
index 96b40ab..ad78b7a 100644
--- a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
+++ b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
@@ -65,7 +65,6 @@
         /**
          * Notifies all the on-going animations of the new frame.
          */
-        @SuppressWarnings("SyntheticAccessor") /* synthetic access */
         void dispatchAnimationFrame() {
             mCurrentFrameTime = SystemClock.uptimeMillis();
             AnimationHandler.this.doAnimationFrame(mCurrentFrameTime);
@@ -86,12 +85,9 @@
             new SimpleArrayMap<>();
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     final ArrayList<AnimationFrameCallback> mAnimationCallbacks = new ArrayList<>();
-    @SuppressWarnings("SyntheticAccessor") /* synthetic access */
     private final AnimationCallbackDispatcher mCallbackDispatcher =
             new AnimationCallbackDispatcher();
-    @SuppressWarnings("SyntheticAccessor") /* synthetic access */
     private final Runnable mRunnable = () -> mCallbackDispatcher.dispatchAnimationFrame();
-    @SuppressWarnings("SyntheticAccessor") /* synthetic access */
     private FrameCallbackScheduler mScheduler;
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     long mCurrentFrameTime = 0;
diff --git a/emoji/emoji/src/main/java/androidx/emoji/text/EmojiCompat.java b/emoji/emoji/src/main/java/androidx/emoji/text/EmojiCompat.java
index d269046..f90f35e 100644
--- a/emoji/emoji/src/main/java/androidx/emoji/text/EmojiCompat.java
+++ b/emoji/emoji/src/main/java/androidx/emoji/text/EmojiCompat.java
@@ -1280,7 +1280,6 @@
             }
         }
 
-        @SuppressWarnings("SyntheticAccessor")
         void onMetadataLoadSuccess(@NonNull final MetadataRepo metadataRepo) {
             //noinspection ConstantConditions
             if (metadataRepo == null) {
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java
index af41c89..fb73cda 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompat.java
@@ -1718,7 +1718,6 @@
             }
         }
 
-        @SuppressWarnings("SyntheticAccessor")
         void onMetadataLoadSuccess(@NonNull final MetadataRepo metadataRepo) {
             //noinspection ConstantConditions
             if (metadataRepo == null) {
diff --git a/fragment/buildSrc b/fragment/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/fragment/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/fragment/fragment-ktx/build.gradle b/fragment/fragment-ktx/build.gradle
index 05b9bce..4003607 100644
--- a/fragment/fragment-ktx/build.gradle
+++ b/fragment/fragment-ktx/build.gradle
@@ -25,7 +25,7 @@
 
 dependencies {
     api(project(":fragment:fragment"))
-    api("androidx.activity:activity-ktx:1.8.0-alpha06") {
+    api(project(":activity:activity-ktx")) {
         because "Mirror fragment dependency graph for -ktx artifacts"
     }
     api("androidx.core:core-ktx:1.2.0") {
diff --git a/fragment/fragment/build.gradle b/fragment/fragment/build.gradle
index c3738bc..b16457b 100644
--- a/fragment/fragment/build.gradle
+++ b/fragment/fragment/build.gradle
@@ -29,7 +29,7 @@
     api("androidx.collection:collection:1.1.0")
     api("androidx.viewpager:viewpager:1.0.0")
     api("androidx.loader:loader:1.0.0")
-    api("androidx.activity:activity:1.8.0-alpha06")
+    api(project(":activity:activity"))
     api("androidx.lifecycle:lifecycle-runtime:2.6.1")
     api("androidx.lifecycle:lifecycle-livedata-core:2.6.1")
     api("androidx.lifecycle:lifecycle-viewmodel:2.6.1")
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/OnBackStackChangedListenerTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/OnBackStackChangedListenerTest.kt
index 846297a..8a743100 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/OnBackStackChangedListenerTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/OnBackStackChangedListenerTest.kt
@@ -29,7 +29,6 @@
 import androidx.testutils.withActivity
 import com.google.common.truth.Truth.assertThat
 import leakcanary.DetectLeaksAfterTestSuccess
-import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -296,7 +295,6 @@
         }
     }
 
-    @Ignore("b/277763818")
     @Test
     fun testOnBackChangeCommittedReplacePop() {
         with(ActivityScenario.launch(FragmentTestActivity::class.java)) {
@@ -329,12 +327,14 @@
 
             val fragment2 = StrictFragment()
 
-            fragmentManager.beginTransaction()
-                .setReorderingAllowed(true)
-                .replace(R.id.content, fragment2)
-                .addToBackStack(null)
-                .commit()
-            fragmentManager.popBackStack()
+            withActivity {
+                fragmentManager.beginTransaction()
+                    .setReorderingAllowed(true)
+                    .replace(R.id.content, fragment2)
+                    .addToBackStack(null)
+                    .commit()
+                fragmentManager.popBackStack()
+            }
             executePendingTransactions()
 
             assertThat(incomingFragments).containsExactlyElementsIn(listOf(fragment1, fragment2))
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/SpecialEffectsControllerTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/SpecialEffectsControllerTest.kt
index b674e61..a35f0c1 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/SpecialEffectsControllerTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/SpecialEffectsControllerTest.kt
@@ -542,6 +542,12 @@
     override fun collectEffects(operations: List<Operation>, isPop: Boolean) {
         operationsToExecute.addAll(operations)
         operations.forEach { operation ->
+            val effect = object : Effect() {
+                override fun onCancel(container: ViewGroup) {
+                    operation.completeEffect(this)
+                }
+            }
+            operation.addEffect(effect)
             operation.addCompletionListener {
                 operationsToExecute.remove(operation)
                 operation.isAwaitingContainerChanges = false
@@ -550,7 +556,11 @@
     }
 
     fun completeAllOperations() {
-        operationsToExecute.forEach(Operation::complete)
+        operationsToExecute.forEach { operation ->
+            operation.effects.forEach { effect ->
+                operation.completeEffect(effect)
+            }
+        }
         operationsToExecute.clear()
     }
 }
@@ -560,10 +570,7 @@
 ) : SpecialEffectsController(container) {
     var executeOperationsCallCount = 0
 
-    override fun collectEffects(operations: List<Operation>, isPop: Boolean) { }
-
-    override fun commitEffects(operations: List<Operation>) {
+    override fun collectEffects(operations: List<Operation>, isPop: Boolean) {
         executeOperationsCallCount++
-        operations.forEach(Operation::complete)
     }
 }
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
index e1cb1f5..4107c70 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
@@ -74,17 +74,11 @@
         // sync animations together before we start loading them.
         syncAnimations(operations)
         for (operation: Operation in operations) {
-            // Create the animation CancellationSignal
-            val animCancellationSignal = CancellationSignal()
-            operation.markStartedSpecialEffect(animCancellationSignal)
             // Add the animation special effect
-            animations.add(AnimationInfo(operation, animCancellationSignal, isPop))
+            animations.add(AnimationInfo(operation, isPop))
 
-            // Create the transition CancellationSignal
-            val transitionCancellationSignal = CancellationSignal()
-            operation.markStartedSpecialEffect(transitionCancellationSignal)
             // Add the transition special effect
-            transitions.add(TransitionInfo(operation, transitionCancellationSignal, isPop,
+            transitions.add(TransitionInfo(operation, isPop,
                     if (isPop) operation === firstOut else operation === lastIn))
 
             // Ensure that if the Operation is synchronously complete, we still
@@ -133,8 +127,6 @@
             val operation: Operation = animatorInfo.operation
             val anim = animatorInfo.getAnimation(context)
             if (anim == null) {
-                // No Animator or Animation, so we can immediately complete the animation
-                operation.effects.add(NoOpEffect(animatorInfo))
                 continue
             }
             val animator = anim.animator
@@ -154,7 +146,6 @@
                         "Ignoring Animator set on $fragment as this Fragment was involved " +
                             "in a Transition.")
                 }
-                operation.effects.add(NoOpEffect(animatorInfo))
                 continue
             }
             startedAnyAnimator = true
@@ -165,7 +156,7 @@
                 // when the Animator ends.
                 operation.isAwaitingContainerChanges = false
             }
-            operation.effects.add(AnimatorEffect(animatorInfo))
+            operation.addEffect(AnimatorEffect(animatorInfo))
         }
 
         // Find all Animations and add the effect to the operation
@@ -178,7 +169,6 @@
                         "Ignoring Animation set on $fragment as Animations cannot " +
                             "run alongside Transitions.")
                 }
-                animationInfo.operation.effects.add(NoOpEffect(animationInfo))
                 continue
             }
             // Then make sure we haven't already started any Animator
@@ -188,10 +178,9 @@
                         "Ignoring Animation set on $fragment as Animations cannot " +
                             "run alongside Animators.")
                 }
-                animationInfo.operation.effects.add(NoOpEffect(animationInfo))
                 continue
             }
-            operation.effects.add(AnimationEffect(animationInfo))
+            operation.addEffect(AnimationEffect(animationInfo))
         }
     }
 
@@ -224,7 +213,6 @@
             // There were no transitions at all so we can just complete all of them
             for (transitionInfo: TransitionInfo in transitionInfos) {
                 startedTransitions[transitionInfo.operation] = false
-                transitionInfo.operation.effects.add(NoOpEffect(transitionInfo))
             }
             return startedTransitions
         }
@@ -373,7 +361,7 @@
         )
 
         transitionInfos.forEach { transitionInfo ->
-            transitionInfo.operation.effects.add(transitionEffect)
+            transitionInfo.operation.addEffect(transitionEffect)
         }
 
         return startedTransitions
@@ -409,28 +397,22 @@
     }
 
     internal open class SpecialEffectsInfo(
-        val operation: Operation,
-        val signal: CancellationSignal
+        val operation: Operation
     ) {
 
         val isVisibilityUnchanged: Boolean
             get() {
-                val currentState = operation.fragment.mView.asOperationState()
+                val currentState = operation.fragment.mView?.asOperationState()
                 val finalState = operation.finalState
                 return currentState === finalState || (currentState !== Operation.State.VISIBLE &&
                     finalState !== Operation.State.VISIBLE)
             }
-
-        fun completeSpecialEffect() {
-            operation.completeSpecialEffect(signal)
-        }
     }
 
     private class AnimationInfo(
         operation: Operation,
-        signal: CancellationSignal,
         private val isPop: Boolean
-    ) : SpecialEffectsInfo(operation, signal) {
+    ) : SpecialEffectsInfo(operation) {
         private var isAnimLoaded = false
         private var animation: FragmentAnim.AnimationOrAnimator? = null
 
@@ -453,10 +435,10 @@
 
     private class TransitionInfo(
         operation: Operation,
-        signal: CancellationSignal,
         isPop: Boolean,
         providesSharedElementTransition: Boolean
-    ) : SpecialEffectsInfo(operation, signal) {
+    ) : SpecialEffectsInfo(operation) {
+
         val transition: Any? = if (operation.finalState === Operation.State.VISIBLE) {
             if (isPop) operation.fragment.reenterTransition else operation.fragment.enterTransition
         } else {
@@ -530,7 +512,7 @@
         override fun onCommit(container: ViewGroup) {
             if (animationInfo.isVisibilityUnchanged) {
                 // No change in visibility, so we can immediately complete the animation
-                animationInfo.completeSpecialEffect()
+                animationInfo.operation.completeEffect(this)
                 return
             }
             val context = container.context
@@ -548,7 +530,7 @@
                 // This means we can't use setAnimationListener() without overriding
                 // any listener that the Fragment has set themselves, so we
                 // just mark the special effect as complete immediately.
-                animationInfo.completeSpecialEffect()
+                animationInfo.operation.completeEffect(this)
             } else {
                 container.startViewTransition(viewToAnimate)
                 val animation: Animation = FragmentAnim.EndViewTransitionAnimation(anim,
@@ -568,7 +550,7 @@
                         // animation until after the onAnimationEnd()
                         container.post {
                             container.endViewTransition(viewToAnimate)
-                            animationInfo.completeSpecialEffect()
+                            animationInfo.operation.completeEffect(this@AnimationEffect)
                         }
                         if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
                             Log.v(FragmentManager.TAG,
@@ -584,16 +566,19 @@
                         "Animation from operation $operation has started.")
                 }
             }
-            // Listen for cancellation and use that to cancel the Animation
-            val signal: CancellationSignal = animationInfo.signal
-            signal.setOnCancelListener {
-                viewToAnimate.clearAnimation()
-                container.endViewTransition(viewToAnimate)
-                animationInfo.completeSpecialEffect()
-                if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
-                    Log.v(FragmentManager.TAG,
-                        "Animation from operation $operation has been cancelled.")
-                }
+        }
+
+        override fun onCancel(container: ViewGroup) {
+            val operation: Operation = animationInfo.operation
+            val fragment = operation.fragment
+            val viewToAnimate = fragment.mView
+
+            viewToAnimate.clearAnimation()
+            container.endViewTransition(viewToAnimate)
+            animationInfo.operation.completeEffect(this)
+            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
+                Log.v(FragmentManager.TAG,
+                    "Animation from operation $operation has been cancelled.")
             }
         }
     }
@@ -624,7 +609,7 @@
                         // applyState until the Animator finishes
                         operation.finalState.applyState(viewToAnimate)
                     }
-                    animatorInfo.completeSpecialEffect()
+                    animatorInfo.operation.completeEffect(this@AnimatorEffect)
                     if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
                         Log.v(FragmentManager.TAG,
                             "Animator from operation $operation has ended.")
@@ -632,10 +617,6 @@
                 }
             })
             animator?.setTarget(viewToAnimate)
-            // Listen for cancellation and use that to cancel the Animation
-            animatorInfo.signal.setOnCancelListener {
-                onCancel(container)
-            }
         }
 
         override fun onProgress(backEvent: BackEventCompat, container: ViewGroup) {
@@ -643,7 +624,7 @@
             val animatorSet = animator
             if (animatorSet == null) {
                 // No change in visibility, so we can go ahead and complete the effect
-                animatorInfo.completeSpecialEffect()
+                animatorInfo.operation.completeEffect(this)
                 return
             }
 
@@ -680,7 +661,7 @@
             val animatorSet = animator
             if (animatorSet == null) {
                 // No change in visibility, so we can go ahead and complete the effect
-                animatorInfo.completeSpecialEffect()
+                animatorInfo.operation.completeEffect(this)
                 return
             }
             animatorSet.start()
@@ -694,7 +675,7 @@
             val animator = animator
             if (animator == null) {
                 // No change in visibility, so we can go ahead and complete the effect
-                animatorInfo.completeSpecialEffect()
+                animatorInfo.operation.completeEffect(this)
             } else {
                 val operation = animatorInfo.operation
                 if (operation.isSeeking) {
@@ -731,6 +712,8 @@
         val isPop: Boolean,
         val startedTransitions: MutableMap<Operation, Boolean>
     ) : Effect() {
+        val transitionSignal = CancellationSignal()
+
         override fun onCommit(container: ViewGroup) {
             // Every transition needs to target at least one View so that they
             // don't interfere with one another. This is the view we use
@@ -810,7 +793,7 @@
                 if (transitionInfo.isVisibilityUnchanged) {
                     // No change in visibility, so we can immediately complete the transition
                     startedTransitions[transitionInfo.operation] = false
-                    transitionInfo.completeSpecialEffect()
+                    transitionInfo.operation.completeEffect(this)
                     continue
                 }
                 val transition = transitionImpl.cloneTransition(transitionInfo.transition)
@@ -823,7 +806,7 @@
                         // in the shared element transition (as otherwise we need to wait
                         // for that to finish)
                         startedTransitions[operation] = false
-                        transitionInfo.completeSpecialEffect()
+                        transitionInfo.operation.completeEffect(this)
                     }
                 } else {
                     // Target the Transition to *only* the set of transitioning views
@@ -916,14 +899,14 @@
                                 "SpecialEffectsController: Container $container has not been " +
                                     "laid out. Completing operation $operation")
                         }
-                        transitionInfo.completeSpecialEffect()
+                        transitionInfo.operation.completeEffect(this)
                     } else {
                         transitionImpl.setListenerForTransitionEnd(
                             transitionInfo.operation.fragment,
                             mergedTransition,
-                            transitionInfo.signal,
+                            transitionSignal,
                             Runnable {
-                                transitionInfo.completeSpecialEffect()
+                                transitionInfo.operation.completeEffect(this)
                                 if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
                                     Log.v(FragmentManager.TAG,
                                         "Transition for operation $operation has completed")
@@ -970,6 +953,10 @@
             }
         }
 
+        override fun onCancel(container: ViewGroup) {
+            transitionSignal.cancel()
+        }
+
         /**
          * Gets the Views in the hierarchy affected by entering and exiting transitions.
          *
@@ -1001,12 +988,6 @@
         }
     }
 
-    internal class NoOpEffect(val info: SpecialEffectsInfo) : Effect() {
-        override fun onCommit(container: ViewGroup) {
-            info.completeSpecialEffect()
-        }
-    }
-
     @RequiresApi(24)
     internal object Api24Impl {
         @DoNotInline
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java b/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
index 397f77d..1bd73dc 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
@@ -19,7 +19,6 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 import static androidx.fragment.app.FragmentManager.TAG;
 
-import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.Dialog;
 import android.content.Context;
@@ -351,7 +350,6 @@
 
     private Handler mHandler;
     private Runnable mDismissRunnable = new Runnable() {
-        @SuppressLint("SyntheticAccessor")
         @Override
         public void run() {
             mOnDismissListener.onDismiss(mDialog);
@@ -360,7 +358,6 @@
 
     private DialogInterface.OnCancelListener mOnCancelListener =
             new DialogInterface.OnCancelListener() {
-        @SuppressLint("SyntheticAccessor")
         @Override
         public void onCancel(@Nullable DialogInterface dialog) {
             if (mDialog != null) {
@@ -371,7 +368,6 @@
 
     private DialogInterface.OnDismissListener mOnDismissListener =
             new DialogInterface.OnDismissListener() {
-        @SuppressLint("SyntheticAccessor")
         @Override
         public void onDismiss(@Nullable DialogInterface dialog) {
             if (mDialog != null) {
@@ -387,7 +383,6 @@
     private int mBackStackId = -1;
     private boolean mCreatingDialog;
     private Observer<LifecycleOwner> mObserver = new Observer<LifecycleOwner>() {
-        @SuppressLint("SyntheticAccessor")
         @Override
         public void onChanged(LifecycleOwner lifecycleOwner) {
             if (lifecycleOwner != null && mShowsDialog) {
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
index 00e5bfd..b6ea42a 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
@@ -453,7 +453,7 @@
     private boolean mExecutingActions;
 
     private final FragmentStore mFragmentStore = new FragmentStore();
-    ArrayList<BackStackRecord> mBackStack;
+    ArrayList<BackStackRecord> mBackStack = new ArrayList<>();
     private ArrayList<Fragment> mCreatedMenus;
     private final FragmentLayoutInflaterFactory mLayoutInflaterFactory =
             new FragmentLayoutInflaterFactory(this);
@@ -1024,7 +1024,7 @@
      * Return the number of entries currently in the back stack.
      */
     public int getBackStackEntryCount() {
-        return (mBackStack != null ? mBackStack.size() : 0) + (mTransitioningOp != null ? 1 : 0);
+        return mBackStack.size() + (mTransitioningOp != null ? 1 : 0);
     }
 
     /**
@@ -1087,7 +1087,6 @@
         }
     }
 
-    @SuppressLint("SyntheticAccessor")
     @Override
     public final void setFragmentResultListener(@NonNull final String requestKey,
             @NonNull final LifecycleOwner lifecycleOwner,
@@ -1466,19 +1465,17 @@
             }
         }
 
-        if (mBackStack != null) {
-            count = mBackStack.size();
-            if (count > 0) {
-                writer.print(prefix); writer.println("Back Stack:");
-                for (int i = 0; i < count; i++) {
-                    BackStackRecord bs = mBackStack.get(i);
-                    writer.print(prefix);
-                    writer.print("  #");
-                    writer.print(i);
-                    writer.print(": ");
-                    writer.println(bs.toString());
-                    bs.dump(innerPrefix, writer);
-                }
+        count = mBackStack.size();
+        if (count > 0) {
+            writer.print(prefix); writer.println("Back Stack:");
+            for (int i = 0; i < count; i++) {
+                BackStackRecord bs = mBackStack.get(i);
+                writer.print(prefix);
+                writer.print("  #");
+                writer.print(i);
+                writer.print(": ");
+                writer.println(bs.toString());
+                bs.dump(innerPrefix, writer);
             }
         }
 
@@ -2275,9 +2272,6 @@
     }
 
     void addBackStackState(BackStackRecord state) {
-        if (mBackStack == null) {
-            mBackStack = new ArrayList<>();
-        }
         mBackStack.add(state);
     }
 
@@ -2488,7 +2482,7 @@
      * @return
      */
     private int findBackStackIndex(@Nullable String name, int id, boolean inclusive) {
-        if (mBackStack == null || mBackStack.isEmpty()) {
+        if (mBackStack.isEmpty()) {
             return -1;
         }
         if (name == null && id < 0) {
@@ -2587,16 +2581,14 @@
 
             // Now save back stack.
             BackStackRecordState[] backStack = null;
-            if (mBackStack != null) {
-                int size = mBackStack.size();
-                if (size > 0) {
-                    backStack = new BackStackRecordState[size];
-                    for (int i = 0; i < size; i++) {
-                        backStack[i] = new BackStackRecordState(mBackStack.get(i));
-                        if (isLoggingEnabled(Log.VERBOSE)) {
-                            Log.v(TAG, "saveAllState: adding back stack #" + i
-                                    + ": " + mBackStack.get(i));
-                        }
+            int size = mBackStack.size();
+            if (size > 0) {
+                backStack = new BackStackRecordState[size];
+                for (int i = 0; i < size; i++) {
+                    backStack[i] = new BackStackRecordState(mBackStack.get(i));
+                    if (isLoggingEnabled(Log.VERBOSE)) {
+                        Log.v(TAG, "saveAllState: adding back stack #" + i
+                                + ": " + mBackStack.get(i));
                     }
                 }
             }
@@ -2758,7 +2750,7 @@
                 mBackStack.add(bse);
             }
         } else {
-            mBackStack = null;
+            mBackStack = new ArrayList<>();
         }
         mBackStackIndex.set(fms.mBackStackIndex);
 
@@ -2799,7 +2791,6 @@
     }
 
     @SuppressWarnings("deprecation")
-    @SuppressLint("SyntheticAccessor")
     void attachController(@NonNull FragmentHostCallback<?> host,
             @NonNull FragmentContainer container, @Nullable final Fragment parent) {
         if (mHost != null) throw new IllegalStateException("Already attached");
@@ -2928,7 +2919,6 @@
             mRequestPermissions = registry.register(keyPrefix + "RequestPermissions",
                     new ActivityResultContracts.RequestMultiplePermissions(),
                     new ActivityResultCallback<Map<String, Boolean>>() {
-                        @SuppressLint("SyntheticAccessor")
                         @Override
                         public void onActivityResult(Map<String, Boolean> result) {
                             String[] permissions = result.keySet().toArray(new String[0]);
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
index a556ef8..8a67e9c 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
@@ -43,9 +43,7 @@
      * given FragmentStateManager is still awaiting completion (or cancellation).
      *
      * This could be because the Operation is still pending (and
-     * [executePendingOperations] hasn't been called) or because all
-     * [started special effects][Operation.markStartedSpecialEffect]
-     * haven't [completed][Operation.completeSpecialEffect].
+     * [executePendingOperations] hasn't been called).
      *
      * @param fragmentStateManager the FragmentStateManager to check for
      * @return The [Operation.LifecycleImpact] of the awaiting Operation, or null if there is
@@ -130,7 +128,6 @@
         fragmentStateManager: FragmentStateManager
     ) {
         synchronized(pendingOperations) {
-            val signal = CancellationSignal()
             val existingOperation = findPendingOperation(fragmentStateManager.fragment)
                 // Get the running operation if the fragment is current transitioning as that means
                 // we can reverse the effect via the merge if needed.
@@ -146,7 +143,7 @@
                 return
             }
             val operation = FragmentStateManagerOperation(
-                finalState, lifecycleImpact, fragmentStateManager, signal
+                finalState, lifecycleImpact, fragmentStateManager
             )
             pendingOperations.add(operation)
             // Ensure that we still run the applyState() call for pending operations
@@ -220,7 +217,7 @@
                         )
                     }
                     // Cancel with seeking if the fragment is transitioning
-                    operation.cancel(operation.fragment.mTransitioning)
+                    operation.cancel(container, operation.fragment.mTransitioning)
                     if (!operation.isComplete) {
                         // Re-add any animations that didn't synchronously call complete()
                         // to continue to track them as running operations
@@ -244,21 +241,14 @@
                 var seekable = true
                 var transitioning = true
                 newPendingOperations.forEach { operation ->
-                    seekable = operation.effects.filter { effect ->
-                        // We don't want noOpEffects changing our seeking
-                        effect !is DefaultSpecialEffectsController.NoOpEffect
-                    }.all { effect ->
+                    seekable = operation.effects.all { effect ->
                         effect.isSeekingSupported
                     }
-                    if (operation.effects.all {
-                            it is DefaultSpecialEffectsController.NoOpEffect
-                    }) {
-                        seekable = false
-                    }
                     if (!operation.fragment.mTransitioning) {
                         transitioning = false
                     }
                 }
+                seekable = seekable && newPendingOperations.flatMap { it.effects }.isNotEmpty()
 
                 if (!transitioning) {
                     processStart(newPendingOperations)
@@ -317,7 +307,7 @@
                             "Cancelling running operation $operation"
                     )
                 }
-                operation.cancel()
+                operation.cancel(container)
             }
 
             // Then cancel pending operations
@@ -335,7 +325,7 @@
                             "Cancelling pending operation $operation"
                     )
                 }
-                operation.cancel()
+                operation.cancel(container)
             }
         }
     }
@@ -356,15 +346,8 @@
      * Collect all of the given operations.
      *
      * If there are no special effects for a given operation, the SpecialEffectsController
-     * should call [Operation.complete]. Otherwise, a
-     * [CancellationSignal] representing each special effect should be added via
-     * [Operation.markStartedSpecialEffect], calling
-     * [Operation.completeSpecialEffect] when that specific
-     * special effect finishes.
+     * should call [Operation.complete].
      *
-     * It is **strongly recommended** that each [CancellationSignal] added with
-     * [Operation.markStartedSpecialEffect] listen for cancellation,
-     * properly cancelling the special effect when the signal is cancelled.
      *
      * @param operations the list of operations to execute in order.
      * @param isPop whether this set of operations should be considered as triggered by a 'pop'.
@@ -394,6 +377,15 @@
             val operation = operations[i]
             applyContainerChangesToOperation(operation)
         }
+
+        // Making a copy cause complete modifies the list.
+        val operationsCopy = operations.toList()
+        for (i in operationsCopy.indices) {
+            val operation = operationsCopy[i]
+            if (operation.effects.isEmpty()) {
+                operation.complete()
+            }
+        }
     }
 
     private fun processStart(operations: List<@JvmSuppressWildcards Operation>) {
@@ -453,10 +445,6 @@
          * The Fragment being added / removed.
          */
         val fragment: Fragment,
-        /**
-         * A signal for handling cancellation
-         */
-        cancellationSignal: CancellationSignal
     ) {
         /**
          * The state that the fragment's View should be in after applying this operation.
@@ -581,7 +569,6 @@
         }
 
         private val completionListeners = mutableListOf<Runnable>()
-        private val specialEffectsSignals = mutableSetOf<CancellationSignal>()
         var isCanceled = false
             private set
         var isComplete = false
@@ -594,12 +581,9 @@
 
         var isAwaitingContainerChanges = true
 
-        val effects = mutableListOf<Effect>()
+        private val _effects = mutableListOf<Effect>()
 
-        init {
-            // Connect the CancellationSignal to our own
-            cancellationSignal.setOnCancelListener { cancel() }
-        }
+        internal val effects: List<Effect> = _effects
 
         override fun toString(): String {
             val identityHash = Integer.toHexString(System.identityHashCode(this))
@@ -609,30 +593,29 @@
                 "fragment = $fragment}"
         }
 
-        fun cancel() {
+        fun cancel(container: ViewGroup) {
             isStarted = false
             if (isCanceled) {
                 return
             }
             isCanceled = true
-            if (specialEffectsSignals.isEmpty()) {
+            if (_effects.isEmpty()) {
                 complete()
             } else {
-                val signals = specialEffectsSignals.toMutableSet()
-                for (signal in signals) {
-                    signal.cancel()
+                effects.toList().forEach {
+                    it.cancel(container)
                 }
             }
         }
 
-        fun cancel(withSeeking: Boolean) {
+        fun cancel(container: ViewGroup, withSeeking: Boolean) {
             if (isCanceled) {
                 return
             }
             if (withSeeking) {
                 isSeeking = true
             }
-            cancel()
+            cancel(container)
         }
 
         fun mergeWith(finalState: State, lifecycleImpact: LifecycleImpact) {
@@ -682,6 +665,16 @@
             completionListeners.add(listener)
         }
 
+        fun addEffect(effect: Effect) {
+            _effects.add(effect)
+        }
+
+        fun completeEffect(effect: Effect) {
+            if (_effects.remove(effect) && _effects.isEmpty()) {
+                complete()
+            }
+        }
+
         /**
          * Callback for when the operation is about to start.
          */
@@ -691,23 +684,13 @@
         }
 
         /**
-         * Add new [CancellationSignal] for special effects.
-         *
-         * @param signal A CancellationSignal that can be used to cancel this special effect.
-         */
-        fun markStartedSpecialEffect(signal: CancellationSignal) {
-            specialEffectsSignals.add(signal)
-        }
-
-        /**
-         * Complete a [CancellationSignal] that was previously added with
-         * [markStartedSpecialEffect].
+         * Complete a [CancellationSignal].
          *
          * This calls through to [Operation.complete] when the last special effect is
          * complete.
          */
-        fun completeSpecialEffect(signal: CancellationSignal) {
-            if (specialEffectsSignals.remove(signal) && specialEffectsSignals.isEmpty()) {
+        fun completeSpecialEffect() {
+            if (effects.isEmpty()) {
                 complete()
             }
         }
@@ -717,7 +700,7 @@
          * special effects associated with this Operation have completed successfully.
          */
         @CallSuper
-        open fun complete() {
+        internal open fun complete() {
             isStarted = false
             if (isComplete) {
                 return
@@ -739,10 +722,8 @@
         finalState: State,
         lifecycleImpact: LifecycleImpact,
         private val fragmentStateManager: FragmentStateManager,
-        cancellationSignal: CancellationSignal
     ) : Operation(
         finalState, lifecycleImpact, fragmentStateManager.fragment,
-        cancellationSignal
     ) {
         override fun onStart() {
             if (isStarted) {
@@ -802,6 +783,8 @@
 
         private var isStarted = false
 
+        private var isCancelled = false
+
         fun performStart(container: ViewGroup) {
             if (!isStarted) {
                 onStart(container)
@@ -815,6 +798,13 @@
 
         open fun onCommit(container: ViewGroup) { }
 
+        fun cancel(container: ViewGroup) {
+            if (!isCancelled) {
+                onCancel(container)
+            }
+            isCancelled = true
+        }
+
         open fun onCancel(container: ViewGroup) { }
     }
 
diff --git a/fragment/settings.gradle b/fragment/settings.gradle
index 8142fa6..627eeb3 100644
--- a/fragment/settings.gradle
+++ b/fragment/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/glance/glance-appwidget-proto/build.gradle b/glance/glance-appwidget-proto/build.gradle
index 497e1b6..f4b676d 100644
--- a/glance/glance-appwidget-proto/build.gradle
+++ b/glance/glance-appwidget-proto/build.gradle
@@ -51,8 +51,8 @@
 afterEvaluate {
     lint {
         lintOptions {
-            // protobuf generates unannotated and synthetic accessor methods
-            disable("UnknownNullness", "SyntheticAccessor")
+            // protobuf generates unannotated methods
+            disable("UnknownNullness")
         }
     }
 }
diff --git a/glance/glance-appwidget/integration-tests/demos/lint-baseline.xml b/glance/glance-appwidget/integration-tests/demos/lint-baseline.xml
new file mode 100644
index 0000000..b45623d
--- /dev/null
+++ b/glance/glance-appwidget/integration-tests/demos/lint-baseline.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProviderKt.ColorProvider can only be called from within the same library group (referenced groupId=`androidx.glance` from groupId=`androidx.glance.glance-appwidget.integration-tests`)"
+        errorLine1="                color = ColorProvider(androidx.glance.R.color.glance_colorSecondary)"
+        errorLine2="                        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/glance/appwidget/demos/ProgressIndicatorAppWidget.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProviderKt.ColorProvider can only be called from within the same library group (referenced groupId=`androidx.glance` from groupId=`androidx.glance.glance-appwidget.integration-tests`)"
+        errorLine1="                color = ColorProvider(androidx.glance.R.color.glance_colorError),"
+        errorLine2="                        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/glance/appwidget/demos/ProgressIndicatorAppWidget.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProviderKt.ColorProvider can only be called from within the same library group (referenced groupId=`androidx.glance` from groupId=`androidx.glance.glance-appwidget.integration-tests`)"
+        errorLine1="                backgroundColor = ColorProvider("
+        errorLine2="                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/glance/appwidget/demos/ProgressIndicatorAppWidget.kt"/>
+    </issue>
+
+</issues>
diff --git a/glance/glance-appwidget/integration-tests/macrobenchmark-target/lint-baseline.xml b/glance/glance-appwidget/integration-tests/macrobenchmark-target/lint-baseline.xml
new file mode 100644
index 0000000..6ac3114
--- /dev/null
+++ b/glance/glance-appwidget/integration-tests/macrobenchmark-target/lint-baseline.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Tracing.enabled can only be accessed from within the same library group (referenced groupId=`androidx.glance` from groupId=`androidx.glance.glance-appwidget.integration-tests`)"
+        errorLine1="        Tracing.enabled.set(true)"
+        errorLine2="                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/glance/appwidget/macrobenchmark/target/BasicAppWidget.kt"/>
+    </issue>
+
+</issues>
diff --git a/glance/glance/lint-baseline.xml b/glance/glance/lint-baseline.xml
index ed40f5a..362729b4 100644
--- a/glance/glance/lint-baseline.xml
+++ b/glance/glance/lint-baseline.xml
@@ -1,5 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.glance`)"
+        errorLine1="            .result.await()"
+        errorLine2="                    ~~~~~">
+        <location
+            file="src/main/java/androidx/glance/session/SessionManager.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.glance`)"
+        errorLine1="        (WorkManager.getInstance(context).getWorkInfosForUniqueWork(key).await()"
+        errorLine2="                                                                         ~~~~~">
+        <location
+            file="src/main/java/androidx/glance/session/SessionManager.kt"/>
+    </issue>
 
     <issue
         id="PrimitiveInLambda"
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index eb29ef2..5b5a7e5 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -2,5 +2,5 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=../../../../tools/external/gradle/gradle-8.3-rc-2-bin.zip
-distributionSha256Sum=222818637ce0a4cb82e322bf847ea49ac319aecdb363d81acabd9e81315d08f6
+distributionUrl=../../../../tools/external/gradle/gradle-8.3-bin.zip
+distributionSha256Sum=591855b517fc635b9e04de1d05d5e76ada3f89f5fc76f87978d1b245b4f69225
diff --git a/graphics/graphics-core/api/current.txt b/graphics/graphics-core/api/current.txt
index fd992b9..37f2bce 100644
--- a/graphics/graphics-core/api/current.txt
+++ b/graphics/graphics-core/api/current.txt
@@ -13,6 +13,7 @@
   @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class CanvasFrontBufferedRenderer<T> {
     ctor public CanvasFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.CanvasFrontBufferedRenderer.Callback<T> callback);
     method public void cancel();
+    method public void clear();
     method public void commit();
     method public boolean isValid();
     method public void release(boolean cancelPending);
@@ -39,15 +40,18 @@
   @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
     ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
     ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer, optional int bufferFormat);
     method public void cancel();
     method public void clear();
     method public void commit();
     method public void execute(Runnable runnable);
+    method public int getBufferFormat();
     method public boolean isValid();
     method public void release(boolean cancelPending);
     method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
     method public void renderFrontBufferedLayer(T param);
     method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
+    property public final int bufferFormat;
   }
 
   @kotlin.jvm.JvmDefaultWithCompatibility public static interface GLFrontBufferedRenderer.Callback<T> {
diff --git a/graphics/graphics-core/api/restricted_current.txt b/graphics/graphics-core/api/restricted_current.txt
index 07d14c8..fb63328 100644
--- a/graphics/graphics-core/api/restricted_current.txt
+++ b/graphics/graphics-core/api/restricted_current.txt
@@ -13,6 +13,7 @@
   @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class CanvasFrontBufferedRenderer<T> {
     ctor public CanvasFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.CanvasFrontBufferedRenderer.Callback<T> callback);
     method public void cancel();
+    method public void clear();
     method public void commit();
     method public boolean isValid();
     method public void release(boolean cancelPending);
@@ -39,15 +40,18 @@
   @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class GLFrontBufferedRenderer<T> {
     ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
     ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+    ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer, optional int bufferFormat);
     method public void cancel();
     method public void clear();
     method public void commit();
     method public void execute(Runnable runnable);
+    method public int getBufferFormat();
     method public boolean isValid();
     method public void release(boolean cancelPending);
     method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
     method public void renderFrontBufferedLayer(T param);
     method public void renderMultiBufferedLayer(java.util.Collection<? extends T> params);
+    property public final int bufferFormat;
   }
 
   @kotlin.jvm.JvmDefaultWithCompatibility public static interface GLFrontBufferedRenderer.Callback<T> {
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt
index c47ca25..a918e61 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt
@@ -408,6 +408,95 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    @Test
+    fun testClear() {
+        if (!isSupported()) {
+            return
+        }
+
+        val renderLatch = CountDownLatch(2)
+        val callbacks = object : CanvasFrontBufferedRenderer.Callback<Int> {
+
+            override fun onDrawFrontBufferedLayer(
+                canvas: Canvas,
+                bufferWidth: Int,
+                bufferHeight: Int,
+                param: Int
+            ) {
+                canvas.drawColor(param)
+            }
+
+            override fun onDrawMultiBufferedLayer(
+                canvas: Canvas,
+                bufferWidth: Int,
+                bufferHeight: Int,
+                params: Collection<Int>
+            ) {
+                for (p in params) {
+                    canvas.drawColor(p)
+                }
+            }
+
+            override fun onMultiBufferedLayerRenderComplete(
+                frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                    transaction.addTransactionCommittedListener(
+                        Executors.newSingleThreadExecutor(),
+                        object : SurfaceControlCompat.TransactionCommittedListener {
+                            override fun onTransactionCommitted() {
+                                renderLatch.countDown()
+                            }
+                        })
+                } else {
+                    renderLatch.countDown()
+                }
+            }
+        }
+        var renderer: CanvasFrontBufferedRenderer<Int>? = null
+        var surfaceView: SurfaceView? = null
+        try {
+            val scenario = ActivityScenario.launch(SurfaceViewTestActivity::class.java)
+                .moveToState(Lifecycle.State.CREATED)
+                .onActivity {
+                    surfaceView = it.getSurfaceView()
+                    renderer = CanvasFrontBufferedRenderer(surfaceView!!, callbacks)
+                }
+
+            scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+                with(renderer!!) {
+                    renderFrontBufferedLayer(Color.BLUE)
+                    commit()
+                    renderFrontBufferedLayer(Color.RED)
+                    clear()
+                }
+            }
+            Assert.assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            val coords = IntArray(2)
+            with(surfaceView!!) {
+                getLocationOnScreen(coords)
+            }
+
+            SurfaceControlUtils.validateOutput { bitmap ->
+                with(bitmap) {
+                    val leftQuadX = coords[0] + width / 4
+                    val rightQuadX = leftQuadX + width / 2
+                    val topQuadY = coords[1] + height / 4
+                    val bottomQuadY = topQuadY + height / 2
+                    Color.WHITE == getPixel(leftQuadX, topQuadY) &&
+                    Color.WHITE == getPixel(rightQuadX, topQuadY) &&
+                    Color.WHITE == getPixel(leftQuadX, bottomQuadY) &&
+                    Color.WHITE == getPixel(rightQuadX, bottomQuadY)
+                }
+            }
+        } finally {
+            renderer?.blockingRelease()
+        }
+    }
+
     @Ignore("b/266749527")
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
     @Test
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
index 1923f63..f54aac7 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
@@ -20,6 +20,7 @@
 import android.graphics.Color
 import android.hardware.HardwareBuffer
 import android.opengl.GLES20
+import android.opengl.GLES30
 import android.opengl.Matrix
 import android.os.Build
 import android.view.SurfaceHolder
@@ -27,6 +28,7 @@
 import androidx.annotation.RequiresApi
 import androidx.graphics.opengl.GLRenderer
 import androidx.graphics.opengl.SurfaceViewTestActivity
+import androidx.graphics.opengl.egl.EGLConfigAttributes
 import androidx.graphics.opengl.egl.EGLManager
 import androidx.graphics.surface.SurfaceControlCompat
 import androidx.graphics.surface.SurfaceControlUtils
@@ -41,6 +43,7 @@
 import java.util.concurrent.TimeUnit
 import kotlin.IllegalStateException
 import kotlin.math.roundToInt
+import org.junit.Assert
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotEquals
 import org.junit.Assert.assertThrows
@@ -1592,6 +1595,150 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    @Test
+    fun testSetPixelFormat() {
+        val flags = HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE or
+            HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+        // First verify if another format other than RGBA_8888 is supported
+        if (!HardwareBuffer.isSupported(
+                1, // width
+                1, // height
+                HardwareBuffer.RGBA_FP16, // format
+                1, // layers
+                flags // flags
+            )) {
+            return
+        }
+
+        var configLoaded = false
+        val configLatch = CountDownLatch(1)
+        val glRenderer = GLRenderer(eglConfigFactory = {
+            val config = loadConfig(EGLConfigAttributes.RGBA_F16)
+            configLoaded = config != null
+            configLatch.countDown()
+            config ?: loadConfig(EGLConfigAttributes.RGBA_8888)!!
+        }).apply {
+            start("glRenderer")
+        }
+
+        data class ColorDepths(val red: Int, val green: Int, val blue: Int, val alpha: Int)
+
+        fun obtainColorDepths(): ColorDepths {
+            val result = IntArray(1)
+            GLES20.glGetFramebufferAttachmentParameteriv(
+                GLES20.GL_FRAMEBUFFER,
+                GLES20.GL_COLOR_ATTACHMENT0,
+                GLES30.GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE,
+                result,
+                0
+            )
+            val alpha = result[0]
+            GLES20.glGetFramebufferAttachmentParameteriv(
+                GLES20.GL_FRAMEBUFFER,
+                GLES20.GL_COLOR_ATTACHMENT0,
+                GLES30.GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE,
+                result,
+                0
+            )
+            val red = result[0]
+            GLES20.glGetFramebufferAttachmentParameteriv(
+                GLES20.GL_FRAMEBUFFER,
+                GLES20.GL_COLOR_ATTACHMENT0,
+                GLES30.GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE,
+                result,
+                0
+            )
+            val green = result[0]
+            GLES20.glGetFramebufferAttachmentParameteriv(
+                GLES20.GL_FRAMEBUFFER,
+                GLES20.GL_COLOR_ATTACHMENT0,
+                GLES30.GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE,
+                result,
+                0
+            )
+            val blue = result[0]
+            return ColorDepths(red, green, blue, alpha)
+        }
+
+        var frontBufferColorDepth: ColorDepths? = null
+        var multiBufferedColorDepth: ColorDepths? = null
+        val latch = CountDownLatch(2)
+
+        val callbacks = object : GLFrontBufferedRenderer.Callback<Any> {
+
+            override fun onDrawFrontBufferedLayer(
+                eglManager: EGLManager,
+                bufferInfo: BufferInfo,
+                transform: FloatArray,
+                param: Any
+            ) {
+                frontBufferColorDepth = obtainColorDepths()
+            }
+
+            override fun onDrawMultiBufferedLayer(
+                eglManager: EGLManager,
+                bufferInfo: BufferInfo,
+                transform: FloatArray,
+                params: Collection<Any>
+            ) {
+                multiBufferedColorDepth = obtainColorDepths()
+            }
+
+            override fun onFrontBufferedLayerRenderComplete(
+                frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                latch.countDown()
+            }
+
+            override fun onMultiBufferedLayerRenderComplete(
+                frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                latch.countDown()
+            }
+        }
+        var renderer: GLFrontBufferedRenderer<Any>? = null
+        var surfaceView: SurfaceView?
+        val rendererCreatedLatch = CountDownLatch(1)
+        try {
+            val scenario = ActivityScenario.launch(SurfaceViewTestActivity::class.java)
+                .moveToState(Lifecycle.State.CREATED)
+                .onActivity {
+                    surfaceView = it.getSurfaceView()
+                    renderer = GLFrontBufferedRenderer(
+                        surfaceView!!,
+                        callbacks,
+                        glRenderer,
+                        bufferFormat = HardwareBuffer.RGBA_FP16
+                    )
+                    rendererCreatedLatch.countDown()
+                }
+            scenario.moveToState(Lifecycle.State.RESUMED)
+
+            configLatch.await(3000, TimeUnit.MILLISECONDS)
+            if (!configLoaded) {
+                // RBGAF16 not supported
+                return
+            }
+
+            assertTrue(rendererCreatedLatch.await(3000, TimeUnit.MILLISECONDS))
+            renderer!!.renderFrontBufferedLayer(Any())
+
+            assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+            Assert.assertNotNull(renderer)
+            assertTrue(renderer!!.isValid())
+            assertEquals(HardwareBuffer.RGBA_FP16, renderer?.bufferFormat)
+            val rgb16 = ColorDepths(16, 16, 16, 16)
+            assertEquals(rgb16, frontBufferColorDepth)
+            assertEquals(rgb16, multiBufferedColorDepth)
+        } finally {
+            renderer.blockingRelease()
+            glRenderer.stop(true)
+        }
+    }
+
     @RequiresApi(Build.VERSION_CODES.Q)
     private fun GLFrontBufferedRenderer<*>?.blockingRelease(timeoutMillis: Long = 3000) {
         if (this != null) {
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/InkCanvasView.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/InkCanvasView.kt
index 79cd6fc..b387b5b 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/InkCanvasView.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/InkCanvasView.kt
@@ -58,7 +58,7 @@
             mSceneParams.addAll(params)
             with(mLinesDrawable) {
                 setBounds(0, 0, bufferWidth, bufferHeight)
-                setColor(Color.MAGENTA)
+                setColor(Color.CYAN)
                 alpha = 128
                 for (param in mSceneParams) {
                     setLines(param)
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt
index a9ac499..69f6088 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29Test.kt
@@ -26,13 +26,13 @@
 import androidx.graphics.isAllColor
 import androidx.graphics.surface.SurfaceControlCompat
 import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_IDENTITY
+import androidx.graphics.utils.HandlerThreadExecutor
 import androidx.graphics.verifyQuadrants
 import androidx.hardware.SyncFenceCompat
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executors
 import java.util.concurrent.TimeUnit
 import java.util.concurrent.atomic.AtomicInteger
 import org.junit.Assert.assertEquals
@@ -144,7 +144,7 @@
         val transformer = BufferTransformer().apply {
             computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
         }
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         val firstRenderLatch = CountDownLatch(1)
         val clearLatch = CountDownLatch(2)
         var buffer: HardwareBuffer? = null
@@ -182,7 +182,7 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
@@ -195,11 +195,10 @@
         val transformer = BufferTransformer().apply {
             computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
         }
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         var buffer: HardwareBuffer? = null
         val initialDrawLatch = CountDownLatch(1)
-        val bufferReadyLatch = CountDownLatch(1)
-        val waitForRequestLatch = CountDownLatch(1)
+        val cancelledBufferLatch = CountDownLatch(1)
 
         var drawCancelledRequestLatch: CountDownLatch? = null
         val renderer = SingleBufferedCanvasRendererV29(
@@ -219,9 +218,16 @@
                 ) {
                     syncFenceCompat?.awaitForever()
                     buffer = hardwareBuffer
-                    bufferReadyLatch.countDown()
                     drawCancelledRequestLatch?.countDown()
                 }
+
+                override fun onBufferCancelled(
+                    hardwareBuffer: HardwareBuffer,
+                    syncFenceCompat: SyncFenceCompat?
+                ) {
+                    buffer = hardwareBuffer
+                    cancelledBufferLatch.countDown()
+                }
             })
         try {
             renderer.render(Color.RED)
@@ -231,9 +237,8 @@
             renderer.render(Color.GREEN)
             renderer.render(Color.YELLOW)
             renderer.cancelPending()
-            waitForRequestLatch.countDown()
 
-            assertTrue(bufferReadyLatch.await(3000, TimeUnit.MILLISECONDS))
+            assertTrue(cancelledBufferLatch.await(3000, TimeUnit.MILLISECONDS))
             // Because the requests were cancelled this latch should not be signalled
             assertFalse(drawCancelledRequestLatch.await(1000, TimeUnit.MILLISECONDS))
             assertNotNull(buffer)
@@ -245,7 +250,7 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
@@ -257,7 +262,7 @@
     fun testMultiReleasesDoesNotCrash() {
         val transformer = BufferTransformer()
         transformer.computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         val renderer = SingleBufferedCanvasRendererV29(
             TEST_WIDTH,
             TEST_HEIGHT,
@@ -278,25 +283,79 @@
         try {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
             renderer.release(true)
         } finally {
-            if (!executor.isShutdown) {
-                executor.shutdownNow()
+            if (!executor.isRunning) {
+                executor.quit()
             }
         }
     }
 
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
     @Test
+    fun testCancelMidRender() {
+        val transformer = BufferTransformer().apply {
+            computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
+        }
+        val cancelLatch = CountDownLatch(1)
+        val renderStartLatch = CountDownLatch(1)
+        val bufferLatch = CountDownLatch(1)
+        var bufferRenderCancelled = false
+        val executor = HandlerThreadExecutor("thread")
+        val renderer = SingleBufferedCanvasRendererV29(
+            TEST_WIDTH,
+            TEST_HEIGHT,
+            transformer,
+            executor,
+            object : SingleBufferedCanvasRenderer.RenderCallbacks<Int> {
+                override fun render(canvas: Canvas, width: Int, height: Int, param: Int) {
+                    renderStartLatch.countDown()
+                    cancelLatch.await(3000, TimeUnit.MILLISECONDS)
+                }
+
+                override fun onBufferReady(
+                    hardwareBuffer: HardwareBuffer,
+                    syncFenceCompat: SyncFenceCompat?
+                ) {
+                    // NO-OP
+                }
+
+                override fun onBufferCancelled(
+                    hardwareBuffer: HardwareBuffer,
+                    syncFenceCompat: SyncFenceCompat?
+                ) {
+                    bufferRenderCancelled = true
+                    bufferLatch.countDown()
+                }
+            })
+        try {
+            renderer.render(Color.RED)
+            renderStartLatch.await(3000, TimeUnit.MILLISECONDS)
+            renderer.cancelPending()
+            cancelLatch.countDown()
+            bufferLatch.await(3000, TimeUnit.MILLISECONDS)
+            assertTrue(bufferRenderCancelled)
+        } finally {
+            val latch = CountDownLatch(1)
+            renderer.release(false) {
+                executor.quit()
+                latch.countDown()
+            }
+            assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    @Test
     fun testBatchedRenders() {
         val transformer = BufferTransformer().apply {
             computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
         }
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         val renderCount = AtomicInteger(0)
         val renderer = SingleBufferedCanvasRendererV29(
             TEST_WIDTH,
@@ -323,7 +382,7 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(false) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
@@ -339,7 +398,7 @@
     ) {
         val transformer = BufferTransformer()
         transformer.computeTransform(TEST_WIDTH, TEST_HEIGHT, transform)
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         var buffer: HardwareBuffer? = null
         val renderLatch = CountDownLatch(1)
         val renderer = SingleBufferedCanvasRendererV29(
@@ -386,7 +445,7 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34Test.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34Test.kt
index fab1a46..df4cc18 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34Test.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34Test.kt
@@ -25,6 +25,7 @@
 import androidx.graphics.opengl.egl.supportsNativeAndroidFence
 import androidx.graphics.surface.SurfaceControlCompat
 import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_IDENTITY
+import androidx.graphics.utils.HandlerThreadExecutor
 import androidx.graphics.verifyQuadrants
 import androidx.graphics.withEgl
 import androidx.hardware.SyncFenceCompat
@@ -32,7 +33,6 @@
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executors
 import java.util.concurrent.TimeUnit
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNotNull
@@ -138,7 +138,7 @@
         val transformer = BufferTransformer().apply {
             computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
         }
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         val firstRenderLatch = CountDownLatch(1)
         val clearLatch = CountDownLatch(2)
         var buffer: HardwareBuffer? = null
@@ -176,7 +176,7 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
@@ -188,7 +188,7 @@
         val transformer = BufferTransformer().apply {
             computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
         }
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         var buffer: HardwareBuffer? = null
         val initialDrawLatch = CountDownLatch(1)
 
@@ -233,7 +233,7 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
@@ -245,7 +245,7 @@
         val transformer = BufferTransformer().apply {
             computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
         }
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         val renderer = SingleBufferedCanvasRendererV34(
             TEST_WIDTH,
             TEST_HEIGHT,
@@ -266,14 +266,14 @@
         try {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
             renderer.release(true)
         } finally {
-            if (!executor.isShutdown) {
-                executor.shutdownNow()
+            if (!executor.isRunning) {
+                executor.quit()
             }
         }
     }
@@ -290,7 +290,7 @@
         val transformer = BufferTransformer().apply {
             computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
         }
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         var syncFenceNull = false
         var drawLatch: CountDownLatch? = null
         val renderer = SingleBufferedCanvasRendererV34(
@@ -326,7 +326,60 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
+                latch.countDown()
+            }
+            assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+        }
+    }
+
+    @Test
+    fun testCancelMidRender() {
+        val transformer = BufferTransformer().apply {
+            computeTransform(TEST_WIDTH, TEST_HEIGHT, BUFFER_TRANSFORM_IDENTITY)
+        }
+        val cancelLatch = CountDownLatch(1)
+        val renderStartLatch = CountDownLatch(1)
+        val bufferLatch = CountDownLatch(1)
+        var bufferRenderCancelled = false
+        val executor = HandlerThreadExecutor("thread")
+        val renderer = SingleBufferedCanvasRendererV34(
+            TEST_WIDTH,
+            TEST_HEIGHT,
+            transformer,
+            executor,
+            object : SingleBufferedCanvasRenderer.RenderCallbacks<Int> {
+                override fun render(canvas: Canvas, width: Int, height: Int, param: Int) {
+                    renderStartLatch.countDown()
+                    cancelLatch.await(3000, TimeUnit.MILLISECONDS)
+                }
+
+                override fun onBufferReady(
+                    hardwareBuffer: HardwareBuffer,
+                    syncFenceCompat: SyncFenceCompat?
+                ) {
+                    // NO-OP
+                }
+
+                override fun onBufferCancelled(
+                    hardwareBuffer: HardwareBuffer,
+                    syncFenceCompat: SyncFenceCompat?
+                ) {
+                    bufferRenderCancelled = true
+                    bufferLatch.countDown()
+                }
+            })
+        try {
+            renderer.render(Color.RED)
+            renderStartLatch.await(3000, TimeUnit.MILLISECONDS)
+            renderer.cancelPending()
+            cancelLatch.countDown()
+            bufferLatch.await(3000, TimeUnit.MILLISECONDS)
+            assertTrue(bufferRenderCancelled)
+        } finally {
+            val latch = CountDownLatch(1)
+            renderer.release(false) {
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
@@ -340,7 +393,7 @@
     ) {
         val transformer = BufferTransformer()
         transformer.computeTransform(TEST_WIDTH, TEST_HEIGHT, transform)
-        val executor = Executors.newSingleThreadExecutor()
+        val executor = HandlerThreadExecutor("thread")
         var buffer: HardwareBuffer? = null
         val renderLatch = CountDownLatch(1)
         val renderer = SingleBufferedCanvasRendererV34(
@@ -387,7 +440,7 @@
         } finally {
             val latch = CountDownLatch(1)
             renderer.release(true) {
-                executor.shutdownNow()
+                executor.quit()
                 latch.countDown()
             }
             assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLFrameBufferRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLFrameBufferRendererTest.kt
index 1d69de6..ac06484 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLFrameBufferRendererTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLFrameBufferRendererTest.kt
@@ -431,18 +431,27 @@
                 renderLatch.countDown()
             }
         }
+        var activity: SurfaceViewTestActivity? = null
         var renderer: GLFrameBufferRenderer? = null
         var surfaceView: SurfaceView?
         try {
             val scenario = ActivityScenario.launch(SurfaceViewTestActivity::class.java)
                 .moveToState(Lifecycle.State.CREATED)
                 .onActivity {
+                    activity = it
                     surfaceView = it.getSurfaceView()
                     renderer = GLFrameBufferRenderer.Builder(surfaceView!!, callbacks).build()
                 }
 
             scenario.moveToState(Lifecycle.State.RESUMED)
             assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            val destroyLatch = CountDownLatch(1)
+            activity?.setOnDestroyCallback {
+                destroyLatch.countDown()
+            }
+            scenario.moveToState(Lifecycle.State.DESTROYED)
+            assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
         } finally {
             renderer.blockingRelease()
         }
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SurfaceViewTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SurfaceViewTestActivity.kt
index fc1c6c9..831cc8b 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SurfaceViewTestActivity.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/SurfaceViewTestActivity.kt
@@ -18,6 +18,8 @@
 
 import android.app.Activity
 import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
 import android.os.Bundle
 import android.view.SurfaceHolder
 import android.view.SurfaceView
@@ -29,10 +31,13 @@
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        window.setBackgroundDrawable(ColorDrawable(Color.WHITE))
         val surfaceView = TestSurfaceView(this).also { mSurfaceView = it }
         setContentView(surfaceView, ViewGroup.LayoutParams(WIDTH, HEIGHT))
     }
 
+    private var mOnDestroyCallback: (() -> Unit)? = null
+
     fun getSurfaceView(): TestSurfaceView = mSurfaceView
 
     companion object {
@@ -73,4 +78,13 @@
             }
         }
     }
+
+    fun setOnDestroyCallback(callback: (() -> Unit)?) {
+        mOnDestroyCallback = callback
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        mOnDestroyCallback?.invoke()
+    }
 }
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/RenderQueue.kt b/graphics/graphics-core/src/main/java/androidx/graphics/RenderQueue.kt
new file mode 100644
index 0000000..2638f25
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/RenderQueue.kt
@@ -0,0 +1,226 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics
+
+import android.hardware.HardwareBuffer
+import androidx.annotation.WorkerThread
+import androidx.graphics.utils.HandlerThreadExecutor
+import androidx.hardware.SyncFenceCompat
+import java.util.concurrent.Executor
+import java.util.concurrent.atomic.AtomicBoolean
+
+/**
+ * Helper class to handle processing of event queues between the provided [HandlerThreadExecutor]
+ * and the [FrameProducer] which may be executing on different threads. This provides helper
+ * facilities to guarantee cancellation of requests and proper queueing of pending requests
+ * while the [FrameProducer] is in the middle of generating a frame.
+ */
+internal class RenderQueue(
+    private val handlerThread: HandlerThreadExecutor,
+    private val frameProducer: FrameProducer,
+    private val frameCallback: FrameCallback
+) {
+
+    /**
+     * Callbacks invoked when new frames are produced or if a frame is generated for a request
+     * that has been cancelled.
+     */
+    interface FrameCallback {
+        fun onFrameComplete(hardwareBuffer: HardwareBuffer, fence: SyncFenceCompat?)
+
+        fun onFrameCancelled(hardwareBuffer: HardwareBuffer, fence: SyncFenceCompat?)
+    }
+
+    /**
+     * Interface to represent a [FrameProducer] this can either be backed by a
+     * [android.graphics.HardwareRenderer] or [android.graphics.HardwareBufferRenderer] depending
+     * on the API level.
+     */
+    interface FrameProducer {
+        fun renderFrame(
+            executor: Executor,
+            requestComplete: (HardwareBuffer, SyncFenceCompat?) -> Unit
+        )
+    }
+
+    /**
+     * Request to be executed by the [RenderQueue] this provides callbacks that are invoked
+     * when the request is initially queued as well as when to be executed before a frame is
+     * generated. This supports batching operations if the [FrameProducer] is busy.
+     */
+    interface Request {
+
+        /**
+         * Callback invoked when the request is enqueued but before a frame is generated
+         */
+        @WorkerThread
+        fun onEnqueued() {}
+
+        /**
+         * Callback invoked when the request is about to be processed as part of a the next
+         * frame
+         */
+        @WorkerThread
+        fun execute()
+
+        /**
+         * Identifier for a request type to determine if the request can be batched
+         */
+        val id: Int
+    }
+
+    /**
+     * Flag to determine if all pending requests should be cancelled
+     */
+    private val mIsCancelling = AtomicBoolean(false)
+
+    /**
+     * Queue of pending requests that are executed whenever the [FrameProducer] is idle
+     */
+    private val mRequests = ArrayDeque<Request>()
+
+    /**
+     * Determines if the [FrameProducer] is in the middle of rendering a frame.
+     * This is accessed on the underlying HandlerThread only
+     */
+    private var mRequestPending = false
+
+    /**
+     * Callback invoked when the [RenderQueue] is to be released. This will be invoked when
+     * there are no more pending requests to process
+     */
+    private var mReleaseCallback: (() -> Unit)? = null
+
+    /**
+     * Flag to determine if we are in the middle of releasing the [RenderQueue]
+     */
+    private val mIsReleasing = AtomicBoolean(false)
+
+    /**
+     * Enqueues a request to be executed by the provided [FrameProducer]
+     */
+    fun enqueue(request: Request) {
+        if (!mIsReleasing.get()) {
+            handlerThread.post(this) {
+                request.onEnqueued()
+                executeRequest(request)
+            }
+        }
+    }
+
+    /**
+     * Cancels all pending requests. If a frame is the in the middle of being rendered,
+     * [FrameCallback.onFrameCancelled] will be invoked upon completion
+     */
+    fun cancelPending() {
+        if (!mIsReleasing.get()) {
+            mIsCancelling.set(true)
+            handlerThread.removeCallbacksAndMessages(this)
+            handlerThread.post(cancelRequestsRunnable)
+        }
+    }
+
+    /**
+     * Configures a release callback to be invoked. If there are no pending requests, this
+     * will get invoked immediately on the [HandlerThreadExecutor]. Otherwise the callback is
+     * preserved and invoked after there are no more pending requests.
+     * After this method is invoked, no subsequent requests will be processed and this [RenderQueue]
+     * instance can no longer be used.
+     */
+    fun release(cancelPending: Boolean, onReleaseComplete: (() -> Unit)?) {
+        if (!mIsReleasing.get()) {
+            if (cancelPending) {
+                cancelPending()
+            }
+            handlerThread.post {
+                mReleaseCallback = onReleaseComplete
+                val pendingRequest = isPendingRequest()
+                if (!pendingRequest) {
+                    executeReleaseCallback()
+                }
+            }
+            mIsReleasing.set(true)
+        }
+    }
+
+    /**
+     * Determines if there are any pending requests or a frame is waiting to be produced
+     */
+    private fun isPendingRequest() = mRequestPending || mRequests.isNotEmpty()
+
+    /**
+     * Helper method that will execute a request on the [FrameProducer] if there is not a previous
+     * request pending. If there is a pending request, this will add it to an internal queue
+     * that will be dequeued when the request is completed.
+     */
+    @WorkerThread
+    private fun executeRequest(request: Request) {
+        if (!mRequestPending) {
+            mRequestPending = true
+            request.execute()
+            frameProducer.renderFrame(handlerThread) { hardwareBuffer, syncFenceCompat ->
+                mRequestPending = false
+                if (!mIsCancelling.getAndSet(false)) {
+                    frameCallback.onFrameComplete(hardwareBuffer, syncFenceCompat)
+                } else {
+                    frameCallback.onFrameCancelled(hardwareBuffer, syncFenceCompat)
+                }
+
+                if (mRequests.isNotEmpty()) {
+                    // Execute any pending requests that were queued while waiting for the
+                    // previous frame to render
+                    executeRequest(mRequests.removeFirst())
+                } else if (mIsReleasing.get()) {
+                    executeReleaseCallback()
+                }
+            }
+        } else {
+            // If the last request matches the type that we are adding, then batch the request
+            // i.e. don't add it to the queue as the previous request will handle batching.
+            val pendingRequest = mRequests.lastOrNull()
+            if (pendingRequest == null || pendingRequest.id != request.id) {
+                mRequests.add(request)
+            }
+        }
+    }
+
+    /**
+     * Returns true if [release] has been invoked
+     */
+    fun isReleased(): Boolean = mIsReleasing.get()
+
+    /**
+     * Invokes the release callback if one is previously configured and discards it
+     */
+    private fun executeReleaseCallback() {
+        mReleaseCallback?.invoke()
+        mReleaseCallback = null
+    }
+
+    /**
+     * Runnable executed when requests are to be cancelled
+     */
+    private val cancelRequestsRunnable = Runnable {
+        mRequests.clear()
+        // Only reset the cancel flag if there is no current frame render request pending
+        // Otherwise when the frame is completed we will update the flag in the corresponding
+        // callback
+        if (!mRequestPending) {
+            mIsCancelling.set(false)
+        }
+    }
+}
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/CanvasFrontBufferedRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/CanvasFrontBufferedRenderer.kt
index 26edcfb..4649af3 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/CanvasFrontBufferedRenderer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/CanvasFrontBufferedRenderer.kt
@@ -30,10 +30,10 @@
 import androidx.annotation.WorkerThread
 import androidx.graphics.MultiBufferedCanvasRenderer
 import androidx.graphics.surface.SurfaceControlCompat
+import androidx.graphics.utils.HandlerThreadExecutor
 import androidx.hardware.SyncFenceCompat
 import java.util.Collections
 import java.util.concurrent.CountDownLatch
-import java.util.concurrent.Executors
 
 /**
  * Class responsible for supporting a "front buffered" rendering system. This allows for lower
@@ -64,7 +64,7 @@
      * Executor used to deliver callbacks for rendering as well as issuing surface control
      * transactions
      */
-    private val mExecutor = Executors.newSingleThreadExecutor()
+    private val mHandlerThread = HandlerThreadExecutor("CanvasRenderThread")
 
     /**
      * RenderNode used to draw the entire multi buffered scene
@@ -194,7 +194,7 @@
                 width,
                 height,
                 mBufferTransform,
-                mExecutor,
+                mHandlerThread,
                 object : SingleBufferedCanvasRenderer.RenderCallbacks<T> {
 
                     override fun render(canvas: Canvas, width: Int, height: Int, param: T) {
@@ -374,6 +374,29 @@
     }
 
     /**
+     * Clears the contents of both the front and multi buffered layers. This triggers a call to
+     * [Callback.onMultiBufferedLayerRenderComplete] and hides the front buffered layer.
+     */
+    fun clear() {
+        if (isValid()) {
+            mParams.clear()
+            mPersistedCanvasRenderer?.cancelPending()
+            mPersistedCanvasRenderer?.clear()
+            mHandlerThread.execute {
+                mMultiBufferNode?.record { canvas ->
+                    canvas.drawColor(Color.BLACK, BlendMode.CLEAR)
+                }
+                mMultiBufferedCanvasRenderer?.renderFrame(mHandlerThread) { buffer, fence ->
+                    setParentSurfaceControlBuffer(buffer, fence)
+                }
+            }
+        } else {
+            Log.w(TAG, "Attempt to clear front buffer after CanvasFrontBufferRenderer " +
+                "has been released")
+        }
+    }
+
+    /**
      * Requests to render the entire scene to the multi buffered layer and schedules a call to
      * [Callback.onDrawMultiBufferedLayer]. The parameters provided to
      * [Callback.onDrawMultiBufferedLayer] will include each argument provided to every
@@ -399,7 +422,7 @@
             mParams = ArrayList<T>()
             val width = surfaceView.width
             val height = surfaceView.height
-            mExecutor.execute {
+            mHandlerThread.execute {
                 mPendingClear = true
                 mMultiBufferNode?.record { canvas ->
                     canvas.save()
@@ -408,7 +431,7 @@
                     canvas.restore()
                 }
                 params.clear()
-                mMultiBufferedCanvasRenderer?.renderFrame(mExecutor) { buffer, fence ->
+                mMultiBufferedCanvasRenderer?.renderFrame(mHandlerThread) { buffer, fence ->
                     setParentSurfaceControlBuffer(buffer, fence)
                     onComplete?.run()
                 }
@@ -456,7 +479,7 @@
     fun cancel() {
         if (isValid()) {
             mPersistedCanvasRenderer?.cancelPending()
-            mExecutor.execute(mCancelRunnable)
+            mHandlerThread.execute(mCancelRunnable)
             mPersistedCanvasRenderer?.clear()
         } else {
             Log.w(TAG, "Attempt to cancel rendering to front buffer after " +
@@ -494,7 +517,7 @@
             surfaceView.holder.removeCallback(mHolderCallback)
             releaseInternal(cancelPending) {
                 onReleaseComplete?.invoke()
-                mExecutor.shutdown()
+                mHandlerThread.quit()
             }
             mIsReleased = true
         }
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
index 692c161..39184c64 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
@@ -16,6 +16,7 @@
 
 package androidx.graphics.lowlatency
 
+import android.hardware.HardwareBuffer
 import android.opengl.GLES20
 import android.opengl.Matrix
 import android.os.Build
@@ -32,6 +33,7 @@
 import androidx.graphics.opengl.GLRenderer
 import androidx.graphics.opengl.egl.EGLManager
 import androidx.graphics.surface.SurfaceControlCompat
+import androidx.hardware.HardwareBufferFormat
 import androidx.hardware.SyncFenceCompat
 import androidx.opengl.EGLExt.Companion.EGL_ANDROID_NATIVE_FENCE_SYNC
 import androidx.opengl.EGLExt.Companion.EGL_KHR_FENCE_SYNC
@@ -61,6 +63,18 @@
  *  [GLRenderer.stop]. Otherwise [GLFrontBufferedRenderer] will create and manage its own
  *  [GLRenderer] internally and will automatically release its resources within
  *  [GLFrontBufferedRenderer.release]
+ *  @param bufferFormat format of the underlying buffers being rendered into by
+ *  [GLFrontBufferedRenderer]. The set of valid formats is implementation-specific and may depend
+ *  on additional EGL extensions. The particular valid combinations for a given Android version
+ *  and implementation should be documented by that version.
+ *  [HardwareBuffer.RGBA_8888] and [HardwareBuffer.RGBX_8888] are guaranteed to be supported.
+ *  However, consumers are recommended to query the desired HardwareBuffer configuration using
+ *  [HardwareBuffer.isSupported]. The default is [HardwareBuffer.RGBA_8888].
+ *
+ * See:
+ * khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt
+ * and
+ * https://developer.android.com/reference/android/hardware/HardwareBuffer
  */
 @RequiresApi(Build.VERSION_CODES.Q)
 @Suppress("AcronymName")
@@ -69,6 +83,7 @@
     callback: Callback<T>,
     @Suppress("ListenerLast")
     glRenderer: GLRenderer? = null,
+    @HardwareBufferFormat val bufferFormat: Int = HardwareBuffer.RGBA_8888
 ) {
 
     private val mFrontBufferedCallbacks = object : GLFrameBufferRenderer.Callback {
@@ -410,6 +425,7 @@
                 mMultiBufferedRenderCallbacks
             ).setGLRenderer(mGLRenderer)
                 .setUsageFlags(FrontBufferUtils.BaseFlags)
+                .setBufferFormat(bufferFormat)
                 .build()
 
             val frontBufferedRenderer = GLFrameBufferRenderer.Builder(
@@ -421,6 +437,7 @@
             ).setGLRenderer(mGLRenderer)
                 .setMaxBuffers(1)
                 .setUsageFlags(obtainHardwareBufferUsageFlags())
+                .setBufferFormat(bufferFormat)
                 .setSyncStrategy(mFrontBufferSyncStrategy)
                 .build()
 
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRenderer.kt
index 3c35ea7..17c9049 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRenderer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRenderer.kt
@@ -21,8 +21,8 @@
 import android.os.Build
 import androidx.annotation.RequiresApi
 import androidx.annotation.WorkerThread
+import androidx.graphics.utils.HandlerThreadExecutor
 import androidx.hardware.SyncFenceCompat
-import java.util.concurrent.Executor
 
 /**
  * Interface to provide an abstraction around implementations for a low latency hardware
@@ -37,6 +37,14 @@
 
         @WorkerThread
         fun onBufferReady(hardwareBuffer: HardwareBuffer, syncFenceCompat: SyncFenceCompat?)
+
+        @WorkerThread
+        fun onBufferCancelled(
+            hardwareBuffer: HardwareBuffer,
+            syncFenceCompat: SyncFenceCompat?
+        ) {
+            // NO-OP
+        }
     }
 
     /**
@@ -72,7 +80,7 @@
             width: Int,
             height: Int,
             bufferTransformer: BufferTransformer,
-            executor: Executor,
+            executor: HandlerThreadExecutor,
             bufferReadyListener: RenderCallbacks<T>
         ): SingleBufferedCanvasRenderer<T> {
             return if (Build.VERSION.SDK_INT >= 34) {
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29.kt
index e59b31e..9a75f29 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV29.kt
@@ -17,26 +17,25 @@
 package androidx.graphics.lowlatency
 
 import android.graphics.BlendMode
-import android.graphics.Canvas
 import android.graphics.Color
 import android.graphics.RenderNode
+import android.hardware.HardwareBuffer
 import android.os.Build
-import android.os.Handler
-import android.os.HandlerThread
 import androidx.annotation.RequiresApi
 import androidx.annotation.WorkerThread
 import androidx.graphics.MultiBufferedCanvasRenderer
+import androidx.graphics.RenderQueue
 import androidx.graphics.surface.SurfaceControlCompat
-import androidx.graphics.utils.post
+import androidx.graphics.utils.HandlerThreadExecutor
+import androidx.hardware.SyncFenceCompat
 import java.util.concurrent.Executor
-import java.util.concurrent.atomic.AtomicBoolean
 
 @RequiresApi(Build.VERSION_CODES.Q)
 internal class SingleBufferedCanvasRendererV29<T>(
     private val width: Int,
     private val height: Int,
     private val bufferTransformer: BufferTransformer,
-    private val executor: Executor,
+    handlerThread: HandlerThreadExecutor,
     private val callbacks: SingleBufferedCanvasRenderer.RenderCallbacks<T>,
 ) : SingleBufferedCanvasRenderer<T> {
 
@@ -47,9 +46,33 @@
             bufferTransformer.glWidth,
             bufferTransformer.glHeight)
     }
-    private val mHandlerThread = HandlerThread("renderRequestThread").apply { start() }
-    private val mHandler = Handler(mHandlerThread.looper)
-    private var mIsReleasing = AtomicBoolean(false)
+
+    private val mRenderQueue = RenderQueue(
+            handlerThread,
+            object : RenderQueue.FrameProducer {
+                override fun renderFrame(
+                    executor: Executor,
+                    requestComplete: (HardwareBuffer, SyncFenceCompat?) -> Unit
+                ) {
+                    mBufferedRenderer.renderFrame(executor, requestComplete)
+                }
+            },
+            object : RenderQueue.FrameCallback {
+                override fun onFrameComplete(
+                    hardwareBuffer: HardwareBuffer,
+                    fence: SyncFenceCompat?
+                ) {
+                    callbacks.onBufferReady(hardwareBuffer, fence)
+                }
+
+                override fun onFrameCancelled(
+                    hardwareBuffer: HardwareBuffer,
+                    fence: SyncFenceCompat?
+                ) {
+                    callbacks.onBufferCancelled(hardwareBuffer, fence)
+                }
+            }
+        )
 
     private val mTransform = android.graphics.Matrix().apply {
         when (bufferTransformer.computedTransform) {
@@ -79,62 +102,38 @@
         maxImages = 1
     )
 
-    private inline fun dispatchOnExecutor(crossinline block: () -> Unit) {
-        executor.execute {
-            block()
-        }
-    }
-
-    // Executor thread
-    private var mPendingDraw = false
     private val mPendingParams = ArrayList<T>()
-    private var mReleaseCallback: (() -> Unit)? = null
 
-    @WorkerThread // Executor thread
-    private inline fun draw(
-        canvasOperations: (Canvas) -> Unit,
-        noinline onDrawComplete: (() -> Unit) = {}
-    ) {
-        if (!mPendingDraw) {
+    private inner class DrawParamRequest(val param: T) : RenderQueue.Request {
+
+        override fun onEnqueued() {
+            mPendingParams.add(param)
+        }
+
+        override fun execute() {
             val canvas = mRenderNode.beginRecording()
-            canvasOperations(canvas)
-            mRenderNode.endRecording()
-            mPendingDraw = true
-            mBufferedRenderer.renderFrame(executor) { hardwareBuffer, fence ->
-                callbacks.onBufferReady(hardwareBuffer, fence)
-                mPendingDraw = false
-                onDrawComplete.invoke()
+            canvas.save()
+            canvas.setMatrix(mTransform)
+            for (pendingParam in mPendingParams) {
+                callbacks.render(canvas, width, height, pendingParam)
             }
+            canvas.restore()
+            mPendingParams.clear()
+            mRenderNode.endRecording()
         }
+
+        override val id: Int = RENDER
     }
 
-    @WorkerThread // Executor thread
-    private fun doRender() {
-        if (mPendingParams.isNotEmpty()) {
-            draw(
-                canvasOperations = { canvas ->
-                    canvas.save()
-                    canvas.setMatrix(mTransform)
-                    for (pendingParam in mPendingParams) {
-                        callbacks.render(canvas, width, height, pendingParam)
-                    }
-                    canvas.restore()
-                    mPendingParams.clear()
-                },
-                onDrawComplete = {
-                    // Render and teardown both early-return when `isPendingDraw == true`, so they
-                    // need to be run again after draw completion if needed.
-                    if (mPendingParams.isNotEmpty()) {
-                        doRender()
-                    } else if (mIsReleasing.get()) {
-                        tearDown()
-                    }
-                }
-            )
+    private val clearRequest = object : RenderQueue.Request {
+        override fun execute() {
+            val canvas = mRenderNode.beginRecording()
+            canvas.drawColor(Color.BLACK, BlendMode.CLEAR)
+            mRenderNode.endRecording()
         }
-    }
 
-    private fun isPendingDraw() = mPendingDraw || mPendingParams.isNotEmpty()
+        override val id: Int = CLEAR
+    }
 
     override var isVisible: Boolean = false
         set(value) {
@@ -144,62 +143,30 @@
 
     @WorkerThread // Executor thread
     private fun tearDown() {
-        mReleaseCallback?.invoke()
         mBufferedRenderer.release()
-        mHandlerThread.quit()
     }
 
     override fun render(param: T) {
-        if (!mIsReleasing.get()) {
-            mHandler.post(RENDER) {
-                dispatchOnExecutor {
-                    mPendingParams.add(param)
-                    doRender()
-                }
-            }
-        }
+        mRenderQueue.enqueue(DrawParamRequest(param))
     }
 
     override fun release(cancelPending: Boolean, onReleaseComplete: (() -> Unit)?) {
-        if (!mIsReleasing.get()) {
-            if (cancelPending) {
-                cancelPending()
-            }
-            mHandler.post(RELEASE) {
-                dispatchOnExecutor {
-                    mReleaseCallback = onReleaseComplete
-                    if (cancelPending || !isPendingDraw()) {
-                        tearDown()
-                    }
-                }
-            }
-            mIsReleasing.set(true)
+        mRenderQueue.release(cancelPending) {
+            onReleaseComplete?.invoke()
+            tearDown()
         }
     }
 
     override fun clear() {
-        if (!mIsReleasing.get()) {
-            mHandler.post(CLEAR) {
-                dispatchOnExecutor {
-                    draw({ canvas ->
-                        canvas.drawColor(Color.BLACK, BlendMode.CLEAR)
-                    })
-                }
-            }
-        }
+        mRenderQueue.enqueue(clearRequest)
     }
 
     override fun cancelPending() {
-        if (!mIsReleasing.get()) {
-            mHandler.removeCallbacksAndMessages(CLEAR)
-            mHandler.removeCallbacksAndMessages(RENDER)
-            dispatchOnExecutor { mPendingParams.clear() }
-        }
+        mRenderQueue.cancelPending()
     }
 
     private companion object {
         const val RENDER = 0
         const val CLEAR = 1
-        const val RELEASE = 2
     }
 }
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34.kt
index 7835f75..80f532a 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SingleBufferedCanvasRendererV34.kt
@@ -17,15 +17,13 @@
 package androidx.graphics.lowlatency
 
 import android.graphics.BlendMode
-import android.graphics.Canvas
 import android.graphics.Color
 import android.graphics.HardwareBufferRenderer
 import android.graphics.RenderNode
 import android.hardware.HardwareBuffer
-import android.os.Handler
-import android.os.HandlerThread
-import android.os.SystemClock
 import androidx.annotation.RequiresApi
+import androidx.graphics.RenderQueue
+import androidx.graphics.utils.HandlerThreadExecutor
 import androidx.hardware.SyncFenceCompat
 import java.util.concurrent.Executor
 
@@ -33,8 +31,8 @@
 internal class SingleBufferedCanvasRendererV34<T>(
     private val width: Int,
     private val height: Int,
-    private val bufferTransformer: BufferTransformer,
-    private val executor: Executor,
+    bufferTransformer: BufferTransformer,
+    handlerThread: HandlerThreadExecutor,
     private val callbacks: SingleBufferedCanvasRenderer.RenderCallbacks<T>
 ) : SingleBufferedCanvasRenderer<T> {
 
@@ -42,41 +40,50 @@
         setPosition(
             0,
             0,
-            width,
-            height
+            [email protected],
+            [email protected]
         )
-        clipToBounds = false
     }
 
+    private val mRenderQueue = RenderQueue(
+        handlerThread,
+        object : RenderQueue.FrameProducer {
+            override fun renderFrame(
+                executor: Executor,
+                requestComplete: (HardwareBuffer, SyncFenceCompat?) -> Unit
+            ) {
+                mHardwareBufferRenderer.obtainRenderRequest().apply {
+                    if (mInverseTransform != BufferTransformHintResolver.UNKNOWN_TRANSFORM) {
+                        setBufferTransform(mInverseTransform)
+                    }
+                    draw(executor) { result ->
+                        requestComplete.invoke(mHardwareBuffer, SyncFenceCompat(result.fence))
+                    }
+                }
+            }
+        },
+        object : RenderQueue.FrameCallback {
+            override fun onFrameComplete(
+                hardwareBuffer: HardwareBuffer,
+                fence: SyncFenceCompat?
+            ) {
+                callbacks.onBufferReady(hardwareBuffer, fence)
+            }
+
+            override fun onFrameCancelled(
+                hardwareBuffer: HardwareBuffer,
+                fence: SyncFenceCompat?
+            ) {
+                callbacks.onBufferCancelled(hardwareBuffer, fence)
+            }
+        }
+    )
+
     private val mInverseTransform =
         bufferTransformer.invertBufferTransform(bufferTransformer.computedTransform)
-    private val mHandlerThread = HandlerThread("renderRequestThread").apply { start() }
-    private val mHandler = Handler(mHandlerThread.looper)
-
-    private inline fun dispatchOnExecutor(crossinline block: () -> Unit) {
-        executor.execute {
-            block()
-        }
-    }
-
-    private inline fun doRender(block: (Canvas) -> Unit) {
-        val canvas = mRenderNode.beginRecording()
-        block(canvas)
-        mRenderNode.endRecording()
-
-        mHardwareBufferRenderer.obtainRenderRequest().apply {
-            if (mInverseTransform != BufferTransformHintResolver.UNKNOWN_TRANSFORM) {
-                setBufferTransform(mInverseTransform)
-            }
-            draw(executor) { result ->
-                callbacks.onBufferReady(mHardwareBuffer, SyncFenceCompat(result.fence))
-            }
-        }
-    }
 
     private fun tearDown() {
         mHardwareBufferRenderer.close()
-        mHandlerThread.quit()
     }
 
     private val mHardwareBuffer = HardwareBuffer.create(
@@ -91,70 +98,59 @@
         setContentRoot(mRenderNode)
     }
 
-    private var mIsReleasing = false
+    private val mPendingParams = ArrayList<T>()
+
+    private inner class DrawParamRequest(val param: T) : RenderQueue.Request {
+
+        override fun onEnqueued() {
+            mPendingParams.add(param)
+        }
+
+        override fun execute() {
+            val canvas = mRenderNode.beginRecording()
+            for (pendingParam in mPendingParams) {
+                callbacks.render(canvas, width, height, pendingParam)
+            }
+            mPendingParams.clear()
+            mRenderNode.endRecording()
+        }
+
+        override val id: Int = RENDER
+    }
+
+    private val clearRequest = object : RenderQueue.Request {
+        override fun execute() {
+            val canvas = mRenderNode.beginRecording()
+            canvas.drawColor(Color.BLACK, BlendMode.CLEAR)
+            mRenderNode.endRecording()
+        }
+
+        override val id: Int = CLEAR
+    }
 
     override fun render(param: T) {
-        if (!mIsReleasing) {
-            mHandler.post(RENDER) {
-                dispatchOnExecutor {
-                    doRender { canvas ->
-                        callbacks.render(canvas, width, height, param)
-                    }
-                }
-            }
-        }
+        mRenderQueue.enqueue(DrawParamRequest(param))
     }
 
     override var isVisible: Boolean = false
 
     override fun release(cancelPending: Boolean, onReleaseComplete: (() -> Unit)?) {
-        if (!mIsReleasing) {
-            if (cancelPending) {
-                cancelPending()
-            }
-            mHandler.post(RELEASE) {
-                tearDown()
-                if (onReleaseComplete != null) {
-                    dispatchOnExecutor {
-                        onReleaseComplete.invoke()
-                    }
-                }
-            }
-            mIsReleasing = true
+        mRenderQueue.release(cancelPending) {
+            onReleaseComplete?.invoke()
+            tearDown()
         }
     }
 
     override fun clear() {
-        if (!mIsReleasing) {
-            mHandler.post(CLEAR) {
-                dispatchOnExecutor {
-                    doRender { canvas ->
-                        canvas.drawColor(Color.BLACK, BlendMode.CLEAR)
-                    }
-                }
-            }
-        }
+        mRenderQueue.enqueue(clearRequest)
     }
 
     override fun cancelPending() {
-        if (!mIsReleasing) {
-            mHandler.removeCallbacksAndMessages(CLEAR)
-            mHandler.removeCallbacksAndMessages(RENDER)
-        }
+        mRenderQueue.cancelPending()
     }
 
     private companion object {
         const val RENDER = 0
         const val CLEAR = 1
-        const val RELEASE = 2
-    }
-
-    /**
-     * Handler does not expose a post method that takes a token and a runnable.
-     * We need the token to be able to cancel pending requests so just call
-     * postAtTime with the default of SystemClock.uptimeMillis
-     */
-    private fun Handler.post(token: Any?, runnable: Runnable) {
-        postAtTime(runnable, token, SystemClock.uptimeMillis())
     }
 }
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/utils/HandlerUtils.kt b/graphics/graphics-core/src/main/java/androidx/graphics/utils/HandlerUtils.kt
index 7dfb466..3767399 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/utils/HandlerUtils.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/utils/HandlerUtils.kt
@@ -17,7 +17,9 @@
 package androidx.graphics.utils
 
 import android.os.Handler
+import android.os.HandlerThread
 import android.os.SystemClock
+import java.util.concurrent.Executor
 
 /**
  * Handler does not expose a post method that takes a token and a runnable.
@@ -27,3 +29,39 @@
 internal fun Handler.post(token: Any?, runnable: Runnable) {
     postAtTime(runnable, token, SystemClock.uptimeMillis())
 }
+
+/**
+ * Helper class that wraps a Handler/HandlerThread combination and implements the [Executor]
+ * interface
+ */
+internal class HandlerThreadExecutor(name: String) : Executor {
+
+    private val mHandlerThread = HandlerThread(name).apply { start() }
+    private val mHandler = Handler(mHandlerThread.looper)
+
+    fun post(token: Any, runnable: Runnable) {
+        mHandler.post(token, runnable)
+    }
+
+    fun post(runnable: Runnable) {
+        mHandler.post(runnable)
+    }
+
+    fun removeCallbacksAndMessages(token: Any) {
+        mHandler.removeCallbacksAndMessages(token)
+    }
+
+    override fun execute(runnable: Runnable?) {
+        runnable?.let { mHandler.post(it) }
+    }
+
+    private var mIsQuit = false
+
+    val isRunning: Boolean
+        get() = !mIsQuit
+
+    fun quit() {
+        mHandlerThread.quit()
+        mIsQuit = true
+    }
+}
diff --git a/health/connect/connect-client-proto/build.gradle b/health/connect/connect-client-proto/build.gradle
index 0ed136e..6d2801c 100644
--- a/health/connect/connect-client-proto/build.gradle
+++ b/health/connect/connect-client-proto/build.gradle
@@ -55,8 +55,8 @@
 afterEvaluate {
     lint {
         lintOptions {
-            // protobuf generates unannotated and synthetic accessor methods
-            disable("UnknownNullness", "SyntheticAccessor")
+            // protobuf generates unannotated methods
+            disable("UnknownNullness")
         }
     }
 }
diff --git a/health/connect/connect-client/lint-baseline.xml b/health/connect/connect-client/lint-baseline.xml
index 6729a05..65699a3 100644
--- a/health/connect/connect-client/lint-baseline.xml
+++ b/health/connect/connect-client/lint-baseline.xml
@@ -264,14 +264,18 @@
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable AggregateDataRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/AggregateDataRequest.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable AggregateDataResponse;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/response/AggregateDataResponse.aidl"/>
     </issue>
@@ -280,21 +284,25 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ChangesEvent;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/changes/ChangesEvent.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable DeleteDataRangeRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/DeleteDataRangeRequest.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable DeleteDataRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/DeleteDataRequest.aidl"/>
     </issue>
@@ -303,28 +311,34 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/error/ErrorStatus.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable GetChangesRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/GetChangesRequest.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable GetChangesResponse;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/response/GetChangesResponse.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable GetChangesTokenRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/GetChangesTokenRequest.aidl"/>
     </issue>
@@ -333,7 +347,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable GetChangesTokenResponse;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/response/GetChangesTokenResponse.aidl"/>
     </issue>
@@ -341,8 +355,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.response.AggregateDataResponse;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IAggregateDataCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IAggregateDataCallback.aidl"/>
     </issue>
@@ -350,8 +364,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IClearOnChangesListenerCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IClearOnChangesListenerCallback.aidl"/>
     </issue>
@@ -359,8 +373,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IDeleteDataCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IDeleteDataCallback.aidl"/>
     </issue>
@@ -368,7 +382,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
+        errorLine1="oneway interface IDeleteDataRangeCallback {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IDeleteDataRangeCallback.aidl"/>
@@ -377,7 +391,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="  void onSuccess(in List&lt;Permission> permissions) = 0;"
+        errorLine1="oneway interface IFilterGrantedPermissionsCallback {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IFilterGrantedPermissionsCallback.aidl"/>
@@ -386,7 +400,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
+        errorLine1="oneway interface IGetChangesCallback {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IGetChangesCallback.aidl"/>
@@ -395,7 +409,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
+        errorLine1="oneway interface IGetChangesTokenCallback {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IGetChangesTokenCallback.aidl"/>
@@ -404,8 +418,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.permission.Permission;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IGetGrantedPermissionsCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IGetGrantedPermissionsCallback.aidl"/>
     </issue>
@@ -413,7 +427,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="}"
+        errorLine1="oneway interface IGetIsInForegroundCallback {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/impl/sdkservice/IGetIsInForegroundCallback.aidl"/>
@@ -422,7 +436,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="}"
+        errorLine1="oneway interface IGetPermissionTokenCallback {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/impl/sdkservice/IGetPermissionTokenCallback.aidl"/>
@@ -431,7 +445,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.impl.sdkservice.ISetPermissionTokenCallback;"
+        errorLine1="oneway interface IHealthDataSdkService {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/impl/sdkservice/IHealthDataSdkService.aidl"/>
@@ -440,8 +454,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.permission.Permission;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IHealthDataService {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IHealthDataService.aidl"/>
     </issue>
@@ -449,8 +463,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IInsertDataCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IInsertDataCallback.aidl"/>
     </issue>
@@ -458,8 +472,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.changes.ChangesEvent;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IOnChangesListener {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IOnChangesListener.aidl"/>
     </issue>
@@ -467,8 +481,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IReadDataCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IReadDataCallback.aidl"/>
     </issue>
@@ -476,8 +490,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IReadDataRangeCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IReadDataRangeCallback.aidl"/>
     </issue>
@@ -485,8 +499,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IReadExerciseRouteCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IReadExerciseRouteCallback.aidl"/>
     </issue>
@@ -494,8 +508,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IRegisterForDataNotificationsCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IRegisterForDataNotificationsCallback.aidl"/>
     </issue>
@@ -503,8 +517,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IRevokeAllPermissionsCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IRevokeAllPermissionsCallback.aidl"/>
     </issue>
@@ -512,8 +526,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface ISetOnChangesListenerCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/ISetOnChangesListenerCallback.aidl"/>
     </issue>
@@ -521,7 +535,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=""
+        errorLine1="oneway interface ISetPermissionTokenCallback {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/impl/sdkservice/ISetPermissionTokenCallback.aidl"/>
@@ -530,8 +544,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IUnregisterFromDataNotificationsCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IUnregisterFromDataNotificationsCallback.aidl"/>
     </issue>
@@ -539,8 +553,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IUpdateDataCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IUpdateDataCallback.aidl"/>
     </issue>
@@ -548,8 +562,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.health.platform.client.error.ErrorStatus;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IUpsertExerciseRouteCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/health/platform/client/service/IUpsertExerciseRouteCallback.aidl"/>
     </issue>
@@ -558,21 +572,25 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable InsertDataResponse;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/response/InsertDataResponse.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable Permission;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/permission/Permission.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ReadDataRangeRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/ReadDataRangeRequest.aidl"/>
     </issue>
@@ -581,14 +599,16 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ReadDataRangeResponse;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/response/ReadDataRangeResponse.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ReadDataRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/ReadDataRequest.aidl"/>
     </issue>
@@ -597,14 +617,16 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ReadDataResponse;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/response/ReadDataResponse.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ReadExerciseRouteRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/ReadExerciseRouteRequest.aidl"/>
     </issue>
@@ -613,47 +635,7896 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ReadExerciseRouteResponse;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/response/ReadExerciseRouteResponse.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable RegisterForDataNotificationsRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/RegisterForDataNotificationsRequest.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable RequestContext;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/RequestContext.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable UnregisterFromDataNotificationsRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/UnregisterFromDataNotificationsRequest.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable UpsertDataRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/UpsertDataRequest.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable UpsertExerciseRouteRequest;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/health/platform/client/request/UpsertExerciseRouteRequest.aidl"/>
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="AggregateDataRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = RequestProto.AggregateDataRequest.parseFrom(it)"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/AggregateDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataResponse.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = ResponseProto.AggregateDataResponse.parseFrom(it)"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/AggregateDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateMetricSpec.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.AggregateMetricSpec.newBuilder()"
+        errorLine2="                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/AggregateMetricToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataTypeName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setDataTypeName(dataTypeName)"
+        errorLine2="         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/AggregateMetricToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAggregationType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setAggregationType(aggregationType.aggregationTypeString)"
+        errorLine2="         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/AggregateMetricToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFieldName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .apply { aggregationField?.let { fieldName = it } }"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/AggregateMetricToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFieldName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .apply { aggregationField?.let { fieldName = it } }"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/AggregateMetricToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/AggregateMetricToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.AggregateDataRequest.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTimeSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setTimeSpec(timeRangeFilter.toProto())"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataOrigin can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .addAllDataOrigin(dataOriginFilter.toProtoList())"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllMetricSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .addAllMetricSpec(metrics.map { it.toProto() })"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.AggregateDataRequest.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTimeSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setTimeSpec(timeRangeFilter.toProto())"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataOrigin can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .addAllDataOrigin(dataOriginFilter.toProtoList())"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllMetricSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .addAllMetricSpec(metrics.map { it.toProto() })"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSliceDurationMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setSliceDurationMillis(timeRangeSlicer.toMillis())"
+        errorLine2="         ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.AggregateDataRequest.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTimeSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setTimeSpec(timeRangeFilter.toProto())"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataOrigin can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .addAllDataOrigin(dataOriginFilter.toProtoList())"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllMetricSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .addAllMetricSpec(metrics.map { it.toProto() })"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSlicePeriod can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setSlicePeriod(timeRangeSlicer.toString())"
+        errorLine2="         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    this.map { DataProto.DataOrigin.newBuilder().setApplicationId(it.packageName).build() }"
+        errorLine2="                                                                                  ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    this.map { DataProto.DataOrigin.newBuilder().setApplicationId(it.packageName).build() }"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    this.map { DataProto.DataOrigin.newBuilder().setApplicationId(it.packageName).build() }"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/AggregateRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ChangesEvent.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = ChangeProto.ChangesEvent.parseFrom(it)"
+        errorLine2="                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/changes/ChangesEvent.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ChangesEvent.getChangesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        changes = extractApiChanges(proto.changesList),"
+        errorLine2="                                          ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ChangesEvent.getChangesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        changes = extractApiChanges(proto.changesList),"
+        errorLine2="                                          ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ChangesEvent.getNextChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        nextChangesToken = proto.nextChangesToken,"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ChangesEvent.getNextChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        nextChangesToken = proto.nextChangesToken,"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getDeleteUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasDeleteUid() -> DeletionChange(it.deleteUid)"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getDeleteUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasDeleteUid() -> DeletionChange(it.deleteUid)"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.hasDeleteUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasDeleteUid() -> DeletionChange(it.deleteUid)"
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getUpsertDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasUpsertDataPoint() -> UpsertionChange(toRecord(it.upsertDataPoint))"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getUpsertDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasUpsertDataPoint() -> UpsertionChange(toRecord(it.upsertDataPoint))"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.hasUpsertDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasUpsertDataPoint() -> UpsertionChange(toRecord(it.upsertDataPoint))"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/changes/ChangesEventConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                intent.getProtoMessages(name = EXTRA_DATA_TYPES, parser = DataType::parseFrom)"
+        errorLine2="                                                                          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/datanotification/DataNotification.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                intent.getProtoMessages(name = EXTRA_DATA_TYPES, parser = DataType::parseFrom)"
+        errorLine2="                                                                          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/datanotification/DataNotification.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataType.newBuilder().setName(toDataTypeName()).build()"
+        errorLine2="                                                    ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataType.newBuilder().setName(toDataTypeName()).build()"
+        errorLine2="                          ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataType.newBuilder().setName(toDataTypeName()).build()"
+        errorLine2="             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="fun DataType.toDataTypeKClass(): KClass&lt;out Record> = name.toDataTypeKClass()"
+        errorLine2="                                                      ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="fun DataType.toDataTypeKClass(): KClass&lt;out Record> = name.toDataTypeKClass()"
+        errorLine2="                                                      ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.DataTypeIdPair.newBuilder().setDataType(dataTypeKC.toDataType()).setId(uid).build()"
+        errorLine2="                                                                                             ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.DataTypeIdPair.newBuilder().setDataType(dataTypeKC.toDataType()).setId(uid).build()"
+        errorLine2="                                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.DataTypeIdPair.newBuilder().setDataType(dataTypeKC.toDataType()).setId(uid).build()"
+        errorLine2="                                                                                  ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataTypeIdPair.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.DataTypeIdPair.newBuilder().setDataType(dataTypeKC.toDataType()).setId(uid).build()"
+        errorLine2="                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataTypeIdPair.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            RequestProto.DataTypeIdPair.newBuilder()"
+        errorLine2="                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(dataTypeKC.toDataType())"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setId(uid)"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/datatype/DataTypeIdPairConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRangeRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = RequestProto.DeleteDataRangeRequest.parseFrom(it)"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRangeRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRangeRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.DeleteDataRangeRequest.newBuilder()"
+        errorLine2="                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .addDataType(dataTypeKC.toDataType())"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTimeSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setTimeSpec(timeRangeFilter.toProto())"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/DeleteDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return RequestProto.DeleteDataRequest.newBuilder()"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllUids can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .addAllUids(obj.uids)"
+        errorLine2="                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllClientIds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .addAllClientIds(obj.clientIds)"
+        errorLine2="                 ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = RequestProto.DeleteDataRequest.parseFrom(it)"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRequest.getClientIdsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return DeleteDataRequest(proto.uidsList, proto.clientIdsList)"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRequest.getClientIdsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return DeleteDataRequest(proto.uidsList, proto.clientIdsList)"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRequest.getUidsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return DeleteDataRequest(proto.uidsList, proto.clientIdsList)"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeleteDataRequest.getUidsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return DeleteDataRequest(proto.uidsList, proto.clientIdsList)"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/DeleteDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCode can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val builder = ErrorProto.ErrorStatus.newBuilder().setCode(errorCode)"
+        errorLine2="                                                          ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val builder = ErrorProto.ErrorStatus.newBuilder().setCode(errorCode)"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMessage can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        errorMessage?.let(builder::setMessage)"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        builder.build()"
+        errorLine2="                ~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = ErrorProto.ErrorStatus.parseFrom(it)"
+        errorLine2="                                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.getCode can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                proto.code,"
+        errorLine2="                      ~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.getCode can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                proto.code,"
+        errorLine2="                      ~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.getMessage can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                if (proto.hasMessage()) proto.message else null,"
+        errorLine2="                                              ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.getMessage can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                if (proto.hasMessage()) proto.message else null,"
+        errorLine2="                                              ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ErrorStatus.hasMessage can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                if (proto.hasMessage()) proto.message else null,"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/error/ErrorStatus.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = DataProto.DataPoint.SubTypeDataList.parseFrom(it)"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/exerciseroute/ExerciseRoute.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = RequestProto.GetChangesRequest.parseFrom(it)"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/GetChangesRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = ResponseProto.GetChangesResponse.parseFrom(it)"
+        errorLine2="                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/GetChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesTokenRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = RequestProto.GetChangesTokenRequest.parseFrom(it)"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/GetChangesTokenRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesTokenResponse.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = ResponseProto.GetChangesTokenResponse.parseFrom(it)"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/GetChangesTokenResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .map { PermissionProto.Permission.newBuilder().setPermission(it).build() }"
+        errorLine2="                                                                                         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPermission can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .map { PermissionProto.Permission.newBuilder().setPermission(it).build() }"
+        errorLine2="                                                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .map { PermissionProto.Permission.newBuilder().setPermission(it).build() }"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getPermission can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .map { it.permission }"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getPermission can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .map { it.permission }"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesTokenRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    RequestProto.GetChangesTokenRequest.newBuilder()"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .addAllDataType(request.recordTypes.map { it.toDataType() })"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataOriginFilters can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .addAllDataOriginFilters("
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                DataProto.DataOrigin.newBuilder()"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                    .setApplicationId(it.packageName)"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                    .build()"
+        errorLine2="                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .build()"
+        errorLine2="                         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesTokenResponse.getChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val changeToken = proto.changesToken"
+        errorLine2="                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesTokenResponse.getChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val changeToken = proto.changesToken"
+        errorLine2="                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    RequestProto.GetChangesRequest.newBuilder()"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .setChangesToken(changesToken)"
+        errorLine2="                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        .build()"
+        errorLine2="                         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getNextChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val nextToken = proto.nextChangesToken"
+        errorLine2="                              ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getNextChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val nextToken = proto.nextChangesToken"
+        errorLine2="                              ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataResponse.getRowsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val result = responseProto.rowsList.first().retrieveAggregateDataRow()"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataResponse.getRowsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val result = responseProto.rowsList.first().retrieveAggregateDataRow()"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataResponse.getRowsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val result = responseProto.rowsList.map { it.toAggregateDataRowGroupByDuration() }.toList()"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataResponse.getRowsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val result = responseProto.rowsList.map { it.toAggregateDataRowGroupByDuration() }.toList()"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataResponse.getRowsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val result = responseProto.rowsList.map { it.toAggregateDataRowGroupByPeriod() }.toList()"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataResponse.getRowsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val result = responseProto.rowsList.map { it.toAggregateDataRowGroupByPeriod() }.toList()"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/HealthConnectClientImpl.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        PermissionProto.Permission.newBuilder().setPermission(it).build()"
+        errorLine2="                                                                                  ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissionsInternal.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPermission can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        PermissionProto.Permission.newBuilder().setPermission(it).build()"
+        errorLine2="                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissionsInternal.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        PermissionProto.Permission.newBuilder().setPermission(it).build()"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissionsInternal.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getPermission can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                ?.map { it.proto.permission }"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissionsInternal.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getPermission can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                ?.map { it.proto.permission }"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissionsInternal.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InsertDataResponse.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return ResponseProto.InsertDataResponse.newBuilder()"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/InsertDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataPointUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .addAllDataPointUid(obj.dataPointUids)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/InsertDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/InsertDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InsertDataResponse.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = ResponseProto.InsertDataResponse.parseFrom(it)"
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/InsertDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InsertDataResponse.getDataPointUidList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return InsertDataResponse(proto.dataPointUidList)"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/InsertDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InsertDataResponse.getDataPointUidList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return InsertDataResponse(proto.dataPointUidList)"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/InsertDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AbstractMessageLite.toByteArray can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    putByteArraysExtra(name = name, byteArrays = messages.map { it.toByteArray() })"
+        errorLine2="                                                                   ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/utils/IntentExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            val proto = PermissionProto.Permission.parseFrom(it)"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/permission/Permission.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AccessType.ACCESS_TYPE_WRITE can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        AccessTypes.WRITE -> PermissionProto.AccessType.ACCESS_TYPE_WRITE"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AccessType.ACCESS_TYPE_READ can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        AccessTypes.READ -> PermissionProto.AccessType.ACCESS_TYPE_READ"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AccessType.ACCESS_TYPE_UNKNOWN can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        else -> PermissionProto.AccessType.ACCESS_TYPE_UNKNOWN"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AccessType.ACCESS_TYPE_WRITE can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        PermissionProto.AccessType.ACCESS_TYPE_WRITE -> AccessTypes.WRITE"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AccessType.ACCESS_TYPE_READ can only be accessed from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        PermissionProto.AccessType.ACCESS_TYPE_READ -> AccessTypes.READ"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    PermissionProto.Permission.newBuilder()"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setDataType(recordType.toDataType())"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAccessType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setAccessType(toAccessTypeProto(accessType))"
+        errorLine2="         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    val dataTypeKClass = dataType.name.toDataTypeKClass()"
+        errorLine2="                                  ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    val dataTypeKClass = dataType.name.toDataTypeKClass()"
+        errorLine2="                                  ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    val dataTypeKClass = dataType.name.toDataTypeKClass()"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    val dataTypeKClass = dataType.name.toDataTypeKClass()"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getAccessType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return HealthPermission(dataTypeKClass, accessType.toAccessType())"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Permission.getAccessType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return HealthPermission(dataTypeKClass, accessType.toAccessType())"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/permission/PermissionConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MessageLite.toByteArray can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    private val bytes: ByteArray by lazy { proto.toByteArray() }"
+        errorLine2="                                                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/impl/data/ProtoParcelable.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.hasStartTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    require(hasStartTimeEpochMs()) { &quot;start time must be set&quot; }"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.hasEndTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    require(hasEndTimeEpochMs()) { &quot;end time must be set&quot; }"
+        errorLine2="            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getStartTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        startTime = Instant.ofEpochMilli(startTimeEpochMs),"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getStartTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        startTime = Instant.ofEpochMilli(startTimeEpochMs),"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getEndTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        endTime = Instant.ofEpochMilli(endTimeEpochMs),"
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getEndTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        endTime = Instant.ofEpochMilli(endTimeEpochMs),"
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        zoneOffset = ZoneOffset.ofTotalSeconds(zoneOffsetSeconds)"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        zoneOffset = ZoneOffset.ofTotalSeconds(zoneOffsetSeconds)"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.hasStartLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    require(hasStartLocalDateTime()) { &quot;start time must be set&quot; }"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.hasEndLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    require(hasEndLocalDateTime()) { &quot;end time must be set&quot; }"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getStartLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        startTime = LocalDateTime.parse(startLocalDateTime),"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getStartLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        startTime = LocalDateTime.parse(startLocalDateTime),"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getEndLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        endTime = LocalDateTime.parse(endLocalDateTime),"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getEndLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        endTime = LocalDateTime.parse(endLocalDateTime),"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getLongValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        longValues = longValuesMap,"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getLongValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        longValues = longValuesMap,"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getDoubleValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        doubleValues = doubleValuesMap,"
+        errorLine2="                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getDoubleValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        doubleValues = doubleValuesMap,"
+        errorLine2="                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getDataOriginsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        dataOrigins = dataOriginsList.mapTo(HashSet()) { DataOrigin(it.applicationId) }"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AggregateDataRow.getDataOriginsList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        dataOrigins = dataOriginsList.mapTo(HashSet()) { DataOrigin(it.applicationId) }"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.getApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        dataOrigins = dataOriginsList.mapTo(HashSet()) { DataOrigin(it.applicationId) }"
+        errorLine2="                                                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.getApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        dataOrigins = dataOriginsList.mapTo(HashSet()) { DataOrigin(it.applicationId) }"
+        errorLine2="                                                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/aggregate/ProtoToAggregateDataRow.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getChangesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        changes = extractChanges(proto.changesList),"
+        errorLine2="                                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getChangesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        changes = extractChanges(proto.changesList),"
+        errorLine2="                                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getNextChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        nextChangesToken = proto.nextChangesToken,"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getNextChangesToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        nextChangesToken = proto.nextChangesToken,"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getHasMore can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        hasMore = proto.hasMore,"
+        errorLine2="                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getHasMore can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        hasMore = proto.hasMore,"
+        errorLine2="                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getChangesTokenExpired can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        changesTokenExpired = proto.changesTokenExpired"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GetChangesResponse.getChangesTokenExpired can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        changesTokenExpired = proto.changesTokenExpired"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getDeleteUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasDeleteUid() -> DeletionChange(it.deleteUid)"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getDeleteUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasDeleteUid() -> DeletionChange(it.deleteUid)"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.hasDeleteUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasDeleteUid() -> DeletionChange(it.deleteUid)"
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getUpsertDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasUpsertDataPoint() -> UpsertionChange(toRecord(it.upsertDataPoint))"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.getUpsertDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasUpsertDataPoint() -> UpsertionChange(toRecord(it.upsertDataPoint))"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataChange.hasUpsertDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            it.hasUpsertDataPoint() -> UpsertionChange(toRecord(it.upsertDataPoint))"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToChangesResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRangeResponse.getDataPointList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        records = proto.dataPointList.map { toRecord(it) as T },"
+        errorLine2="                        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRangeResponse.getDataPointList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        records = proto.dataPointList.map { toRecord(it) as T },"
+        errorLine2="                        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRangeResponse.getPageToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        pageToken = proto.pageToken"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRangeResponse.getPageToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        pageToken = proto.pageToken"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/response/ProtoToReadRecordsResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        when (dataType.name) {"
+        errorLine2="              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        when (dataType.name) {"
+        errorLine2="              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        when (dataType.name) {"
+        errorLine2="                       ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        when (dataType.name) {"
+        errorLine2="                       ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSeriesValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        seriesValuesList.map { value ->"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                time = Instant.ofEpochMilli(value.instantTimeMillis),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    segments = subTypeDataListsMap[&quot;segments&quot;]?.toSegmentList() ?: emptyList(),"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    segments = subTypeDataListsMap[&quot;segments&quot;]?.toSegmentList() ?: emptyList(),"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    laps = subTypeDataListsMap[&quot;laps&quot;]?.toLapList() ?: emptyList(),"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    laps = subTypeDataListsMap[&quot;laps&quot;]?.toLapList() ?: emptyList(),"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        subTypeDataListsMap[&quot;route&quot;]?.let {"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        subTypeDataListsMap[&quot;route&quot;]?.let {"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            ?: if (valuesMap[&quot;hasRoute&quot;]?.booleanVal == true)"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            ?: if (valuesMap[&quot;hasRoute&quot;]?.booleanVal == true)"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getBooleanVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            ?: if (valuesMap[&quot;hasRoute&quot;]?.booleanVal == true)"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getBooleanVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            ?: if (valuesMap[&quot;hasRoute&quot;]?.booleanVal == true)"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    biotin = valuesMap[&quot;biotin&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    biotin = valuesMap[&quot;biotin&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    biotin = valuesMap[&quot;biotin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    biotin = valuesMap[&quot;biotin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    caffeine = valuesMap[&quot;caffeine&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    caffeine = valuesMap[&quot;caffeine&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    caffeine = valuesMap[&quot;caffeine&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    caffeine = valuesMap[&quot;caffeine&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    calcium = valuesMap[&quot;calcium&quot;]?.doubleVal?.grams,"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    calcium = valuesMap[&quot;calcium&quot;]?.doubleVal?.grams,"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    calcium = valuesMap[&quot;calcium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    calcium = valuesMap[&quot;calcium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energy = valuesMap[&quot;calories&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energy = valuesMap[&quot;calories&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energy = valuesMap[&quot;calories&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energy = valuesMap[&quot;calories&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energyFromFat = valuesMap[&quot;caloriesFromFat&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energyFromFat = valuesMap[&quot;caloriesFromFat&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energyFromFat = valuesMap[&quot;caloriesFromFat&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    energyFromFat = valuesMap[&quot;caloriesFromFat&quot;]?.doubleVal?.kilocalories,"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chloride = valuesMap[&quot;chloride&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chloride = valuesMap[&quot;chloride&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chloride = valuesMap[&quot;chloride&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chloride = valuesMap[&quot;chloride&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    cholesterol = valuesMap[&quot;cholesterol&quot;]?.doubleVal?.grams,"
+        errorLine2="                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    cholesterol = valuesMap[&quot;cholesterol&quot;]?.doubleVal?.grams,"
+        errorLine2="                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    cholesterol = valuesMap[&quot;cholesterol&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    cholesterol = valuesMap[&quot;cholesterol&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chromium = valuesMap[&quot;chromium&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chromium = valuesMap[&quot;chromium&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chromium = valuesMap[&quot;chromium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    chromium = valuesMap[&quot;chromium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    copper = valuesMap[&quot;copper&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    copper = valuesMap[&quot;copper&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    copper = valuesMap[&quot;copper&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    copper = valuesMap[&quot;copper&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    dietaryFiber = valuesMap[&quot;dietaryFiber&quot;]?.doubleVal?.grams,"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    dietaryFiber = valuesMap[&quot;dietaryFiber&quot;]?.doubleVal?.grams,"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    dietaryFiber = valuesMap[&quot;dietaryFiber&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    dietaryFiber = valuesMap[&quot;dietaryFiber&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folate = valuesMap[&quot;folate&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folate = valuesMap[&quot;folate&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folate = valuesMap[&quot;folate&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folate = valuesMap[&quot;folate&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folicAcid = valuesMap[&quot;folicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folicAcid = valuesMap[&quot;folicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folicAcid = valuesMap[&quot;folicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    folicAcid = valuesMap[&quot;folicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iodine = valuesMap[&quot;iodine&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iodine = valuesMap[&quot;iodine&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iodine = valuesMap[&quot;iodine&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iodine = valuesMap[&quot;iodine&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iron = valuesMap[&quot;iron&quot;]?.doubleVal?.grams,"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iron = valuesMap[&quot;iron&quot;]?.doubleVal?.grams,"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iron = valuesMap[&quot;iron&quot;]?.doubleVal?.grams,"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    iron = valuesMap[&quot;iron&quot;]?.doubleVal?.grams,"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    magnesium = valuesMap[&quot;magnesium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    magnesium = valuesMap[&quot;magnesium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    magnesium = valuesMap[&quot;magnesium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    magnesium = valuesMap[&quot;magnesium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    manganese = valuesMap[&quot;manganese&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    manganese = valuesMap[&quot;manganese&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    manganese = valuesMap[&quot;manganese&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    manganese = valuesMap[&quot;manganese&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    molybdenum = valuesMap[&quot;molybdenum&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    molybdenum = valuesMap[&quot;molybdenum&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    molybdenum = valuesMap[&quot;molybdenum&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    molybdenum = valuesMap[&quot;molybdenum&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    monounsaturatedFat = valuesMap[&quot;monounsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    monounsaturatedFat = valuesMap[&quot;monounsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    monounsaturatedFat = valuesMap[&quot;monounsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    monounsaturatedFat = valuesMap[&quot;monounsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    niacin = valuesMap[&quot;niacin&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    niacin = valuesMap[&quot;niacin&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    niacin = valuesMap[&quot;niacin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    niacin = valuesMap[&quot;niacin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    pantothenicAcid = valuesMap[&quot;pantothenicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    pantothenicAcid = valuesMap[&quot;pantothenicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    pantothenicAcid = valuesMap[&quot;pantothenicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    pantothenicAcid = valuesMap[&quot;pantothenicAcid&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    phosphorus = valuesMap[&quot;phosphorus&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    phosphorus = valuesMap[&quot;phosphorus&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    phosphorus = valuesMap[&quot;phosphorus&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    phosphorus = valuesMap[&quot;phosphorus&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    polyunsaturatedFat = valuesMap[&quot;polyunsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    polyunsaturatedFat = valuesMap[&quot;polyunsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    polyunsaturatedFat = valuesMap[&quot;polyunsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    polyunsaturatedFat = valuesMap[&quot;polyunsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    potassium = valuesMap[&quot;potassium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    potassium = valuesMap[&quot;potassium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    potassium = valuesMap[&quot;potassium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    potassium = valuesMap[&quot;potassium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    protein = valuesMap[&quot;protein&quot;]?.doubleVal?.grams,"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    protein = valuesMap[&quot;protein&quot;]?.doubleVal?.grams,"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    protein = valuesMap[&quot;protein&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    protein = valuesMap[&quot;protein&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    riboflavin = valuesMap[&quot;riboflavin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    riboflavin = valuesMap[&quot;riboflavin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    riboflavin = valuesMap[&quot;riboflavin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    riboflavin = valuesMap[&quot;riboflavin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    saturatedFat = valuesMap[&quot;saturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    saturatedFat = valuesMap[&quot;saturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    saturatedFat = valuesMap[&quot;saturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    saturatedFat = valuesMap[&quot;saturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    selenium = valuesMap[&quot;selenium&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    selenium = valuesMap[&quot;selenium&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    selenium = valuesMap[&quot;selenium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    selenium = valuesMap[&quot;selenium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sodium = valuesMap[&quot;sodium&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sodium = valuesMap[&quot;sodium&quot;]?.doubleVal?.grams,"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sodium = valuesMap[&quot;sodium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sodium = valuesMap[&quot;sodium&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sugar = valuesMap[&quot;sugar&quot;]?.doubleVal?.grams,"
+        errorLine2="                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sugar = valuesMap[&quot;sugar&quot;]?.doubleVal?.grams,"
+        errorLine2="                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sugar = valuesMap[&quot;sugar&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    sugar = valuesMap[&quot;sugar&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    thiamin = valuesMap[&quot;thiamin&quot;]?.doubleVal?.grams,"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    thiamin = valuesMap[&quot;thiamin&quot;]?.doubleVal?.grams,"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    thiamin = valuesMap[&quot;thiamin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    thiamin = valuesMap[&quot;thiamin&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalCarbohydrate = valuesMap[&quot;totalCarbohydrate&quot;]?.doubleVal?.grams,"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalCarbohydrate = valuesMap[&quot;totalCarbohydrate&quot;]?.doubleVal?.grams,"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalCarbohydrate = valuesMap[&quot;totalCarbohydrate&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalCarbohydrate = valuesMap[&quot;totalCarbohydrate&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalFat = valuesMap[&quot;totalFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalFat = valuesMap[&quot;totalFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalFat = valuesMap[&quot;totalFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    totalFat = valuesMap[&quot;totalFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    transFat = valuesMap[&quot;transFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    transFat = valuesMap[&quot;transFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    transFat = valuesMap[&quot;transFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    transFat = valuesMap[&quot;transFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    unsaturatedFat = valuesMap[&quot;unsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    unsaturatedFat = valuesMap[&quot;unsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    unsaturatedFat = valuesMap[&quot;unsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    unsaturatedFat = valuesMap[&quot;unsaturatedFat&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminA = valuesMap[&quot;vitaminA&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminA = valuesMap[&quot;vitaminA&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminA = valuesMap[&quot;vitaminA&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminA = valuesMap[&quot;vitaminA&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB12 = valuesMap[&quot;vitaminB12&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB12 = valuesMap[&quot;vitaminB12&quot;]?.doubleVal?.grams,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB12 = valuesMap[&quot;vitaminB12&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB12 = valuesMap[&quot;vitaminB12&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB6 = valuesMap[&quot;vitaminB6&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB6 = valuesMap[&quot;vitaminB6&quot;]?.doubleVal?.grams,"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB6 = valuesMap[&quot;vitaminB6&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminB6 = valuesMap[&quot;vitaminB6&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminC = valuesMap[&quot;vitaminC&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminC = valuesMap[&quot;vitaminC&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminC = valuesMap[&quot;vitaminC&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminC = valuesMap[&quot;vitaminC&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminD = valuesMap[&quot;vitaminD&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminD = valuesMap[&quot;vitaminD&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminD = valuesMap[&quot;vitaminD&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminD = valuesMap[&quot;vitaminD&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminE = valuesMap[&quot;vitaminE&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminE = valuesMap[&quot;vitaminE&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminE = valuesMap[&quot;vitaminE&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminE = valuesMap[&quot;vitaminE&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminK = valuesMap[&quot;vitaminK&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminK = valuesMap[&quot;vitaminK&quot;]?.doubleVal?.grams,"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminK = valuesMap[&quot;vitaminK&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    vitaminK = valuesMap[&quot;vitaminK&quot;]?.doubleVal?.grams,"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    zinc = valuesMap[&quot;zinc&quot;]?.doubleVal?.grams,"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    zinc = valuesMap[&quot;zinc&quot;]?.doubleVal?.grams,"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    zinc = valuesMap[&quot;zinc&quot;]?.doubleVal?.grams,"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    zinc = valuesMap[&quot;zinc&quot;]?.doubleVal?.grams,"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    stages = subTypeDataListsMap[&quot;stages&quot;]?.toStageList() ?: emptyList(),"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getSubTypeDataListsMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    stages = subTypeDataListsMap[&quot;stages&quot;]?.toStageList() ?: emptyList(),"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            else -> throw RuntimeException(&quot;Unknown data type ${dataType.name}&quot;)"
+        errorLine2="                                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            else -> throw RuntimeException(&quot;Unknown data type ${dataType.name}&quot;)"
+        errorLine2="                                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            else -> throw RuntimeException(&quot;Unknown data type ${dataType.name}&quot;)"
+        errorLine2="                                                                         ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.getName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            else -> throw RuntimeException(&quot;Unknown data type ${dataType.name}&quot;)"
+        errorLine2="                                                                         ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        protoWrapper.proto.valuesList.map { value ->"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        protoWrapper.proto.valuesList.map { value ->"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                time = Instant.ofEpochMilli(value.startTimeMillis),"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                time = Instant.ofEpochMilli(value.startTimeMillis),"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                latitude = value.valuesMap[&quot;latitude&quot;]!!.doubleVal,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                latitude = value.valuesMap[&quot;latitude&quot;]!!.doubleVal,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                latitude = value.valuesMap[&quot;latitude&quot;]!!.doubleVal,"
+        errorLine2="                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                latitude = value.valuesMap[&quot;latitude&quot;]!!.doubleVal,"
+        errorLine2="                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                longitude = value.valuesMap[&quot;longitude&quot;]!!.doubleVal,"
+        errorLine2="                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                longitude = value.valuesMap[&quot;longitude&quot;]!!.doubleVal,"
+        errorLine2="                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                longitude = value.valuesMap[&quot;longitude&quot;]!!.doubleVal,"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                longitude = value.valuesMap[&quot;longitude&quot;]!!.doubleVal,"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                altitude = value.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                altitude = value.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                altitude = value.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                altitude = value.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                horizontalAccuracy = value.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                horizontalAccuracy = value.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                horizontalAccuracy = value.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                horizontalAccuracy = value.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                verticalAccuracy = value.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                verticalAccuracy = value.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                verticalAccuracy = value.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                verticalAccuracy = value.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = Instant.ofEpochMilli(startTimeMillis)"
+        errorLine2="                                 ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = Instant.ofEpochMilli(startTimeMillis)"
+        errorLine2="                                 ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = Instant.ofEpochMilli(endTimeMillis)"
+        errorLine2="                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = Instant.ofEpochMilli(endTimeMillis)"
+        errorLine2="                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = Instant.ofEpochMilli(instantTimeMillis)"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = Instant.ofEpochMilli(instantTimeMillis)"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getStartZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        if (hasStartZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(startZoneOffsetSeconds) else null"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getStartZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        if (hasStartZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(startZoneOffsetSeconds) else null"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.hasStartZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        if (hasStartZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(startZoneOffsetSeconds) else null"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getEndZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = if (hasEndZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(endZoneOffsetSeconds) else null"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getEndZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = if (hasEndZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(endZoneOffsetSeconds) else null"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.hasEndZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = if (hasEndZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(endZoneOffsetSeconds) else null"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = if (hasZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(zoneOffsetSeconds) else null"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = if (hasZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(zoneOffsetSeconds) else null"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.hasZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    get() = if (hasZoneOffsetSeconds()) ZoneOffset.ofTotalSeconds(zoneOffsetSeconds) else null"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun DataPointOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun DataPointOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getStringVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun DataPointOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getStringVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun DataPointOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesMap[key]?.enumVal"
+        errorLine2="           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPointOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesMap[key]?.enumVal"
+        errorLine2="           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getEnumVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesMap[key]?.enumVal"
+        errorLine2="                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getEnumVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesMap[key]?.enumVal"
+        errorLine2="                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.longVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    valuesMap[key]?.doubleVal ?: defaultVal"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getStringVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getStringVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getString(key: String): String? = valuesMap[key]?.stringVal"
+        errorLine2="                                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getEnum(key: String): String? = valuesMap[key]?.enumVal"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValueOrBuilder.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getEnum(key: String): String? = valuesMap[key]?.enumVal"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getEnumVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getEnum(key: String): String? = valuesMap[key]?.enumVal"
+        errorLine2="                                                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getEnumVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="internal fun SeriesValueOrBuilder.getEnum(key: String): String? = valuesMap[key]?.enumVal"
+        errorLine2="                                                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            id = if (hasUid()) uid else Metadata.EMPTY_ID,"
+        errorLine2="                               ~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            id = if (hasUid()) uid else Metadata.EMPTY_ID,"
+        errorLine2="                               ~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.hasUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            id = if (hasUid()) uid else Metadata.EMPTY_ID,"
+        errorLine2="                     ~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.getApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            dataOrigin = DataOrigin(dataOrigin.applicationId),"
+        errorLine2="                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.getApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            dataOrigin = DataOrigin(dataOrigin.applicationId),"
+        errorLine2="                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDataOrigin can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            dataOrigin = DataOrigin(dataOrigin.applicationId),"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDataOrigin can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            dataOrigin = DataOrigin(dataOrigin.applicationId),"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getUpdateTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            lastModifiedTime = Instant.ofEpochMilli(updateTimeMillis),"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getUpdateTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            lastModifiedTime = Instant.ofEpochMilli(updateTimeMillis),"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getClientId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            clientRecordId = if (hasClientId()) clientId else null,"
+        errorLine2="                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getClientId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            clientRecordId = if (hasClientId()) clientId else null,"
+        errorLine2="                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.hasClientId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            clientRecordId = if (hasClientId()) clientId else null,"
+        errorLine2="                                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getClientVersion can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            clientRecordVersion = clientVersion,"
+        errorLine2="                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getClientVersion can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            clientRecordVersion = clientVersion,"
+        errorLine2="                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDevice can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            device = if (hasDevice()) device.toDevice() else null,"
+        errorLine2="                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getDevice can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            device = if (hasDevice()) device.toDevice() else null,"
+        errorLine2="                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.hasDevice can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            device = if (hasDevice()) device.toDevice() else null,"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getRecordingMethod can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            recordingMethod = recordingMethod"
+        errorLine2="                              ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.getRecordingMethod can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            recordingMethod = recordingMethod"
+        errorLine2="                              ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.getManufacturer can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        manufacturer = if (hasManufacturer()) manufacturer else null,"
+        errorLine2="                                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.getManufacturer can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        manufacturer = if (hasManufacturer()) manufacturer else null,"
+        errorLine2="                                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.hasManufacturer can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        manufacturer = if (hasManufacturer()) manufacturer else null,"
+        errorLine2="                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.getModel can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        model = if (hasModel()) model else null,"
+        errorLine2="                                ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.getModel can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        model = if (hasModel()) model else null,"
+        errorLine2="                                ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.hasModel can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        model = if (hasModel()) model else null,"
+        errorLine2="                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.getType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        type = DEVICE_TYPE_STRING_TO_INT_MAP.getOrDefault(type, Device.TYPE_UNKNOWN)"
+        errorLine2="                                                          ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.getType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        type = DEVICE_TYPE_STRING_TO_INT_MAP.getOrDefault(type, Device.TYPE_UNKNOWN)"
+        errorLine2="                                                          ~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            startTime = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            startTime = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            endTime = Instant.ofEpochMilli(it.endTimeMillis),"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            endTime = Instant.ofEpochMilli(it.endTimeMillis),"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            stage = STAGE_TYPE_STRING_TO_INT_MAP[it.valuesMap[&quot;stage&quot;]?.enumVal]"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            stage = STAGE_TYPE_STRING_TO_INT_MAP[it.valuesMap[&quot;stage&quot;]?.enumVal]"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getEnumVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            stage = STAGE_TYPE_STRING_TO_INT_MAP[it.valuesMap[&quot;stage&quot;]?.enumVal]"
+        errorLine2="                                                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getEnumVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            stage = STAGE_TYPE_STRING_TO_INT_MAP[it.valuesMap[&quot;stage&quot;]?.enumVal]"
+        errorLine2="                                                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            startTime = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            startTime = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            endTime = Instant.ofEpochMilli(it.endTimeMillis),"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            endTime = Instant.ofEpochMilli(it.endTimeMillis),"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            segmentType = (it.valuesMap[&quot;type&quot;]?.longVal ?: EXERCISE_SEGMENT_TYPE_UNKNOWN).toInt(),"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            segmentType = (it.valuesMap[&quot;type&quot;]?.longVal ?: EXERCISE_SEGMENT_TYPE_UNKNOWN).toInt(),"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            segmentType = (it.valuesMap[&quot;type&quot;]?.longVal ?: EXERCISE_SEGMENT_TYPE_UNKNOWN).toInt(),"
+        errorLine2="                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            segmentType = (it.valuesMap[&quot;type&quot;]?.longVal ?: EXERCISE_SEGMENT_TYPE_UNKNOWN).toInt(),"
+        errorLine2="                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            repetitions = it.valuesMap[&quot;reps&quot;]?.longVal?.toInt() ?: 0"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            repetitions = it.valuesMap[&quot;reps&quot;]?.longVal?.toInt() ?: 0"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            repetitions = it.valuesMap[&quot;reps&quot;]?.longVal?.toInt() ?: 0"
+        errorLine2="                                                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            repetitions = it.valuesMap[&quot;reps&quot;]?.longVal?.toInt() ?: 0"
+        errorLine2="                                                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            startTime = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            startTime = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            endTime = Instant.ofEpochMilli(it.endTimeMillis),"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            endTime = Instant.ofEpochMilli(it.endTimeMillis),"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            length = it.valuesMap[&quot;length&quot;]?.doubleVal?.meters,"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            length = it.valuesMap[&quot;length&quot;]?.doubleVal?.meters,"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            length = it.valuesMap[&quot;length&quot;]?.doubleVal?.meters,"
+        errorLine2="                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            length = it.valuesMap[&quot;length&quot;]?.doubleVal?.meters,"
+        errorLine2="                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.getValuesList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return valuesList.map {"
+        errorLine2="           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            time = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            time = Instant.ofEpochMilli(it.startTimeMillis),"
+        errorLine2="                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            latitude = it.valuesMap[&quot;latitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            latitude = it.valuesMap[&quot;latitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            latitude = it.valuesMap[&quot;latitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            latitude = it.valuesMap[&quot;latitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            longitude = it.valuesMap[&quot;longitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            longitude = it.valuesMap[&quot;longitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            longitude = it.valuesMap[&quot;longitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            longitude = it.valuesMap[&quot;longitude&quot;]?.doubleVal ?: 0.0,"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            altitude = it.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            altitude = it.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            altitude = it.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            altitude = it.valuesMap[&quot;altitude&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            horizontalAccuracy = it.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            horizontalAccuracy = it.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            horizontalAccuracy = it.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            horizontalAccuracy = it.valuesMap[&quot;horizontal_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            verticalAccuracy = it.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.getValuesMap can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            verticalAccuracy = it.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            verticalAccuracy = it.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.getDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            verticalAccuracy = it.valuesMap[&quot;vertical_accuracy&quot;]?.doubleVal?.meters,"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataResponse.getDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        resultFuture.set(response.proto.dataPoint)"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/impl/ReadDataCallback.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataResponse.getDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        resultFuture.set(response.proto.dataPoint)"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/impl/ReadDataCallback.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRangeRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = RequestProto.ReadDataRangeRequest.parseFrom(it)"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/ReadDataRangeRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRangeRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return RequestProto.ReadDataRangeRequest.newBuilder()"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setDataType(request.recordType.toDataType())"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTimeSpec can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            setTimeSpec(request.timeRangeFilter.toProto())"
+        errorLine2="            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataOriginFilters can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            addAllDataOriginFilters("
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    DataProto.DataOrigin.newBuilder().setApplicationId(it.packageName).build()"
+        errorLine2="                                                                                       ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    DataProto.DataOrigin.newBuilder().setApplicationId(it.packageName).build()"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    DataProto.DataOrigin.newBuilder().setApplicationId(it.packageName).build()"
+        errorLine2="                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAscOrdering can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            setAscOrdering(request.ascendingOrder)"
+        errorLine2="            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPageSize can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            setPageSize(request.pageSize)"
+        errorLine2="            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPageToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            request.pageToken?.let { setPageToken(it) }"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRangeRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRangeResponse.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = ResponseProto.ReadDataRangeResponse.parseFrom(it)"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/ReadDataRangeResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = RequestProto.ReadDataRequest.parseFrom(it)"
+        errorLine2="                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/ReadDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    RequestProto.ReadDataRequest.newBuilder()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataTypeIdPair can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setDataTypeIdPair(toDataTypeIdPairProto(dataTypeKC, uid))"
+        errorLine2="         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/request/ReadDataRequestToProto.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadDataResponse.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = ResponseProto.ReadDataResponse.parseFrom(it)"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/ReadDataResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadExerciseRouteRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val proto = RequestProto.ReadExerciseRouteRequest.parseFrom(it)"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/ReadExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ReadExerciseRouteResponse.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = ResponseProto.ReadExerciseRouteResponse.parseFrom(it)"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/response/ReadExerciseRouteResponse.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BasalBodyTemperature&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    putValues(&quot;temperature&quot;, doubleVal(temperature.inCelsius))"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;measurementLocation&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BasalMetabolicRate&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;bmr&quot;, doubleVal(basalMetabolicRate.inKilocaloriesPerDay)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BloodGlucose&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    putValues(&quot;level&quot;, doubleVal(level.inMillimolesPerLiter))"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;specimenSource&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;mealType&quot;, it)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;relationToMeal&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BloodPressure&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    putValues(&quot;systolic&quot;, doubleVal(systolic.inMillimetersOfMercury))"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    putValues(&quot;diastolic&quot;, doubleVal(diastolic.inMillimetersOfMercury))"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;bodyPosition&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;measurementLocation&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BodyFat&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;percentage&quot;, doubleVal(percentage.value)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BodyTemperature&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    putValues(&quot;temperature&quot;, doubleVal(temperature.inCelsius))"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;measurementLocation&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BodyWaterMass&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;mass&quot;, doubleVal(mass.inKilograms)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;BoneMass&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;mass&quot;, doubleVal(mass.inKilograms)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;CervicalMucus&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;texture&quot;, it)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;amount&quot;, it)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                DataProto.SeriesValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .putValues(&quot;rpm&quot;, doubleVal(sample.revolutionsPerMinute))"
+        errorLine2="                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .setInstantTimeMillis(sample.time.toEpochMilli())"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .build()"
+        errorLine2="                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                DataProto.SeriesValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .putValues(&quot;bpm&quot;, longVal(sample.beatsPerMinute))"
+        errorLine2="                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .setInstantTimeMillis(sample.time.toEpochMilli())"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .build()"
+        errorLine2="                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Height&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;height&quot;, doubleVal(height.inMeters)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;HeartRateVariabilityRmssd&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;heartRateVariability&quot;, doubleVal(heartRateVariabilityMillis)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            instantaneousProto().setDataType(protoDataType(&quot;IntermenstrualBleeding&quot;)).build()"
+        errorLine2="                                                                                      ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            instantaneousProto().setDataType(protoDataType(&quot;IntermenstrualBleeding&quot;)).build()"
+        errorLine2="                                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;LeanBodyMass&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;mass&quot;, doubleVal(mass.inKilograms)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Menstruation&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;flow&quot;, it)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            intervalProto().setDataType(protoDataType(&quot;MenstruationPeriod&quot;)).build()"
+        errorLine2="                                                                             ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            intervalProto().setDataType(protoDataType(&quot;MenstruationPeriod&quot;)).build()"
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;OvulationTest&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;result&quot;, it)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;OxygenSaturation&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;percentage&quot;, doubleVal(percentage.value)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                DataProto.SeriesValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .putValues(&quot;power&quot;, doubleVal(sample.power.inWatts))"
+        errorLine2="                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .setInstantTimeMillis(sample.time.toEpochMilli())"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .build()"
+        errorLine2="                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;RespiratoryRate&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;rate&quot;, doubleVal(rate)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;RestingHeartRate&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;bpm&quot;, longVal(beatsPerMinute)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;SexualActivity&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;protectionUsed&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                DataProto.SeriesValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .putValues(&quot;speed&quot;, doubleVal(sample.speed.inMetersPerSecond))"
+        errorLine2="                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .setInstantTimeMillis(sample.time.toEpochMilli())"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .build()"
+        errorLine2="                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SeriesValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                DataProto.SeriesValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .putValues(&quot;rate&quot;, doubleVal(sample.rate))"
+        errorLine2="                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .setInstantTimeMillis(sample.time.toEpochMilli())"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    .build()"
+        errorLine2="                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Vo2Max&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    putValues(&quot;vo2&quot;, doubleVal(vo2MillilitersPerMinuteKilogram))"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        ?.let { putValues(&quot;measurementMethod&quot;, it) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Weight&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;weight&quot;, doubleVal(weight.inKilograms)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;ActiveCaloriesBurned&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;energy&quot;, doubleVal(energy.inKilocalories)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;ActivitySession&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .putValues(&quot;hasRoute&quot;, boolVal(exerciseRouteResult !is ExerciseRouteResult.NoData))"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    putValues(&quot;activityType&quot;, exerciseType)"
+        errorLine2="                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    title?.let { putValues(&quot;title&quot;, stringVal(it)) }"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    notes?.let { putValues(&quot;notes&quot;, stringVal(it)) }"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putSubTypeDataLists can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putSubTypeDataLists("
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            DataProto.DataPoint.SubTypeDataList.newBuilder()"
+        errorLine2="                                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .addAllValues(segments.map { it.toProto() })"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .build()"
+        errorLine2="                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putSubTypeDataLists can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putSubTypeDataLists("
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            DataProto.DataPoint.SubTypeDataList.newBuilder()"
+        errorLine2="                                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .addAllValues(laps.map { it.toProto() })"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .build()"
+        errorLine2="                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putSubTypeDataLists can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putSubTypeDataLists("
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            DataProto.DataPoint.SubTypeDataList.newBuilder()"
+        errorLine2="                                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .addAllValues("
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .build()"
+        errorLine2="                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Distance&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;distance&quot;, doubleVal(distance.inMeters)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;ElevationGained&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;elevation&quot;, doubleVal(elevation.inMeters)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;FloorsClimbed&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;floors&quot;, doubleVal(floors)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Hydration&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;volume&quot;, doubleVal(volume.inLiters)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Nutrition&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;biotin&quot;, doubleVal(biotin.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;caffeine&quot;, doubleVal(caffeine.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;calcium&quot;, doubleVal(calcium.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;calories&quot;, doubleVal(energy.inKilocalories))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;caloriesFromFat&quot;, doubleVal(energyFromFat.inKilocalories))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;chloride&quot;, doubleVal(chloride.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;cholesterol&quot;, doubleVal(cholesterol.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;chromium&quot;, doubleVal(chromium.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;copper&quot;, doubleVal(copper.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;dietaryFiber&quot;, doubleVal(dietaryFiber.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;folate&quot;, doubleVal(folate.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;folicAcid&quot;, doubleVal(folicAcid.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;iodine&quot;, doubleVal(iodine.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;iron&quot;, doubleVal(iron.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;magnesium&quot;, doubleVal(magnesium.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;manganese&quot;, doubleVal(manganese.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;molybdenum&quot;, doubleVal(molybdenum.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;monounsaturatedFat&quot;, doubleVal(monounsaturatedFat.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;niacin&quot;, doubleVal(niacin.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;pantothenicAcid&quot;, doubleVal(pantothenicAcid.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;phosphorus&quot;, doubleVal(phosphorus.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;polyunsaturatedFat&quot;, doubleVal(polyunsaturatedFat.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;potassium&quot;, doubleVal(potassium.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;protein&quot;, doubleVal(protein.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;riboflavin&quot;, doubleVal(riboflavin.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;saturatedFat&quot;, doubleVal(saturatedFat.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;selenium&quot;, doubleVal(selenium.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;sodium&quot;, doubleVal(sodium.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;sugar&quot;, doubleVal(sugar.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;thiamin&quot;, doubleVal(thiamin.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;totalCarbohydrate&quot;, doubleVal(totalCarbohydrate.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;totalFat&quot;, doubleVal(totalFat.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;transFat&quot;, doubleVal(transFat.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;unsaturatedFat&quot;, doubleVal(unsaturatedFat.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;vitaminA&quot;, doubleVal(vitaminA.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;vitaminB12&quot;, doubleVal(vitaminB12.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;vitaminB6&quot;, doubleVal(vitaminB6.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;vitaminC&quot;, doubleVal(vitaminC.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;vitaminD&quot;, doubleVal(vitaminD.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;vitaminE&quot;, doubleVal(vitaminE.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;vitaminK&quot;, doubleVal(vitaminK.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;zinc&quot;, doubleVal(zinc.inGrams))"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;mealType&quot;, it)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    name?.let { putValues(&quot;name&quot;, stringVal(it)) }"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;SleepSession&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putSubTypeDataLists can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putSubTypeDataLists("
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataList.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                            DataProto.DataPoint.SubTypeDataList.newBuilder()"
+        errorLine2="                                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .addAllValues(stages.map { it.toProto() })"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                                .build()"
+        errorLine2="                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    title?.let { putValues(&quot;title&quot;, stringVal(it)) }"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    notes?.let { putValues(&quot;notes&quot;, stringVal(it)) }"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;SleepStage&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                        putValues(&quot;stage&quot;, it)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;Steps&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;count&quot;, longVal(count)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;TotalCaloriesBurned&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;energy&quot;, doubleVal(energy.inKilocalories)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setDataType(protoDataType(&quot;WheelchairPushes&quot;))"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .apply { putValues(&quot;count&quot;, longVal(count)) }"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setDataType(protoDataType(dataTypeName = dataTypeName))"
+        errorLine2="         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addSeriesValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                addSeriesValues(getSeriesValue(sample))"
+        errorLine2="                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoConverters.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.DataType.newBuilder().setName(dataTypeName).build()"
+        errorLine2="                                                          ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setName can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.DataType.newBuilder().setName(dataTypeName).build()"
+        errorLine2="                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataType.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.DataType.newBuilder().setName(dataTypeName).build()"
+        errorLine2="                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        DataProto.DataPoint.newBuilder()"
+        errorLine2="                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInstantTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .setInstantTimeMillis(time.toEpochMilli())"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    zoneOffset?.let { builder.setZoneOffsetSeconds(it.totalSeconds) }"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataPoint.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        DataProto.DataPoint.newBuilder()"
+        errorLine2="                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .setStartTimeMillis(startTime.toEpochMilli())"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .setEndTimeMillis(endTime.toEpochMilli())"
+        errorLine2="             ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    startZoneOffset?.let { builder.setStartZoneOffsetSeconds(it.totalSeconds) }"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndZoneOffsetSeconds can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    endZoneOffset?.let { builder.setEndZoneOffsetSeconds(it.totalSeconds) }"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        uid = metadata.id"
+        errorLine2="        ~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        uid = metadata.id"
+        errorLine2="        ~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataOrigin can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        dataOrigin ="
+        errorLine2="        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDataOrigin can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        dataOrigin ="
+        errorLine2="        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            DataProto.DataOrigin.newBuilder()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DataOrigin.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            DataProto.DataOrigin.newBuilder()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setApplicationId(metadata.dataOrigin.packageName)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setApplicationId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .setApplicationId(metadata.dataOrigin.packageName)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUpdateTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        updateTimeMillis = metadata.lastModifiedTime.toEpochMilli()"
+        errorLine2="        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUpdateTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        updateTimeMillis = metadata.lastModifiedTime.toEpochMilli()"
+        errorLine2="        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClientId can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    metadata.clientRecordId?.let { setClientId(it) }"
+        errorLine2="                                   ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClientVersion can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        clientVersion = metadata.clientRecordVersion"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClientVersion can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        clientVersion = metadata.clientRecordVersion"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDevice can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    metadata.device?.let { setDevice(it.toProto()) }"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRecordingMethod can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        recordingMethod = metadata.recordingMethod"
+        errorLine2="        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRecordingMethod can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        recordingMethod = metadata.recordingMethod"
+        errorLine2="        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Device.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return DataProto.Device.newBuilder()"
+        errorLine2="                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setManufacturer can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            obj.manufacturer?.let { setManufacturer(it) }"
+        errorLine2="                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModel can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            obj.model?.let { setModel(it) }"
+        errorLine2="                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setType can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            setType(DEVICE_TYPE_INT_TO_STRING_MAP.getOrDefault(obj.type, DeviceTypes.UNKNOWN))"
+        errorLine2="            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return DataProto.SubTypeDataValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setStartTimeMillis(startTime.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setEndTimeMillis(endTime.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                putValues(&quot;stage&quot;, it)"
+        errorLine2="                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return DataProto.SubTypeDataValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setStartTimeMillis(startTime.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setEndTimeMillis(endTime.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .putValues(&quot;type&quot;, longVal(segmentType.toLong()))"
+        errorLine2="         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .putValues(&quot;reps&quot;, longVal(repetitions.toLong()))"
+        errorLine2="         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return DataProto.SubTypeDataValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setStartTimeMillis(startTime.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setEndTimeMillis(endTime.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .apply { length?.let { putValues(&quot;length&quot;, doubleVal(it.inMeters)) } }"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SubTypeDataValue.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return DataProto.SubTypeDataValue.newBuilder()"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setStartTimeMillis(time.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndTimeMillis can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setEndTimeMillis(time.toEpochMilli())"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .putValues(&quot;latitude&quot;, doubleVal(latitude))"
+        errorLine2="         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .putValues(&quot;longitude&quot;, doubleVal(longitude))"
+        errorLine2="         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            horizontalAccuracy?.let { putValues(&quot;horizontal_accuracy&quot;, doubleVal(it.inMeters)) }"
+        errorLine2="                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            verticalAccuracy?.let { putValues(&quot;vertical_accuracy&quot;, doubleVal(it.inMeters)) }"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putValues can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            altitude?.let { putValues(&quot;altitude&quot;, doubleVal(it.inMeters)) }"
+        errorLine2="                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RegisterForDataNotificationsRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    RequestProto.RegisterForDataNotificationsRequest.parseFrom(it)"
+        errorLine2="                                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RegisterForDataNotificationsRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        RequestProto.RequestContext.newBuilder()"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCallingPackage can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .setCallingPackage(obj.callingPackage)"
+        errorLine2="             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSdkVersion can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .setSdkVersion(obj.sdkVersion)"
+        errorLine2="             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPermissionToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .apply { obj.permissionToken?.let { setPermissionToken(it) } }"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIsInForeground can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .setIsInForeground(obj.isInForeground)"
+        errorLine2="             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            .build()"
+        errorLine2="             ~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            RequestProto.RequestContext.parseFrom(it).run {"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getCallingPackage can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getCallingPackage can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getIsInForeground can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getIsInForeground can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getPermissionToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getPermissionToken can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getSdkVersion can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RequestContext.getSdkVersion can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                RequestContext(callingPackage, sdkVersion, permissionToken, isInForeground)"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/RequestContext.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeSpec.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    return TimeProto.TimeSpec.newBuilder()"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            obj.startTime?.let { setStartTimeEpochMs(it.toEpochMilli()) }"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndTimeEpochMs can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            obj.endTime?.let { setEndTimeEpochMs(it.toEpochMilli()) }"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            obj.localStartTime?.let { setStartLocalDateTime(it.toString()) }"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndLocalDateTime can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            obj.localEndTime?.let { setEndLocalDateTime(it.toString()) }"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/time/TimeRangeFilterConverter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UnregisterFromDataNotificationsRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                    RequestProto.UnregisterFromDataNotificationsRequest.parseFrom(it)"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UnregisterFromDataNotificationsRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertDataRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return RequestProto.UpsertDataRequest.newBuilder()"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addAllDataPoint can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .addAllDataPoint(obj.dataPoints)"
+        errorLine2="                 ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertDataRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="                val proto = RequestProto.UpsertDataRequest.parseFrom(it)"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertDataRequest.getDataPointList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return UpsertDataRequest(proto.dataPointList)"
+        errorLine2="                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertDataRequest.getDataPointList can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="            return UpsertDataRequest(proto.dataPointList)"
+        errorLine2="                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertDataRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertExerciseRouteRequest.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="      return RequestProto.UpsertExerciseRouteRequest.newBuilder()"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSessionUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setSessionUid(obj.sessionUid)"
+        errorLine2="         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExerciseRoute can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .setExerciseRoute(obj.route)"
+        errorLine2="         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        .build()"
+        errorLine2="         ~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertExerciseRouteRequest.parseFrom can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="        val proto = RequestProto.UpsertExerciseRouteRequest.parseFrom(it)"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertExerciseRouteRequest.getExerciseRoute can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="      return UpsertExerciseRouteRequest(proto.sessionUid, proto.exerciseRoute)"
+        errorLine2="                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertExerciseRouteRequest.getExerciseRoute can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="      return UpsertExerciseRouteRequest(proto.sessionUid, proto.exerciseRoute)"
+        errorLine2="                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertExerciseRouteRequest.getSessionUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="      return UpsertExerciseRouteRequest(proto.sessionUid, proto.exerciseRoute)"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="UpsertExerciseRouteRequest.getSessionUid can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="      return UpsertExerciseRouteRequest(proto.sessionUid, proto.exerciseRoute)"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/platform/client/request/UpsertExerciseRouteRequest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setLongVal(value).build()"
+        errorLine2="                                                   ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLongVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setLongVal(value).build()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setLongVal(value).build()"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setDoubleVal(value).build()"
+        errorLine2="                                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDoubleVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setDoubleVal(value).build()"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setDoubleVal(value).build()"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setStringVal(value).build()"
+        errorLine2="                                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setStringVal(value).build()"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setStringVal(value).build()"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setEnumVal(value).build()"
+        errorLine2="                                                   ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEnumVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setEnumVal(value).build()"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setEnumVal(value).build()"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.build can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setBooleanVal(value).build()"
+        errorLine2="                                                      ~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBooleanVal can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setBooleanVal(value).build()"
+        errorLine2="                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Value.newBuilder can only be called from within the same library group (referenced groupId=`__local_aars__` from groupId=`androidx.health.connect`)"
+        errorLine1="    DataProto.Value.newBuilder().setBooleanVal(value).build()"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/health/connect/client/impl/converters/records/ValueExt.kt"/>
+    </issue>
+
+    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ClientConfiguration(String apiClientName, String servicePackageName, String bindAction) {"
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
index 15a36b41..fce572a 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
@@ -331,7 +331,7 @@
             else "androidx.health.ACTION_HEALTH_CONNECT_SETTINGS"
 
         /**
-         * The Health Connect SDK is not unavailable on this device at the time. This can be due to
+         * The Health Connect SDK is unavailable on this device at the time. This can be due to
          * the device running a lower than required Android Version.
          *
          * Apps should hide any integration points to Health Connect in this case.
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/SinglePointerPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/SinglePointerPredictor.java
index 90eddf7..61669c5 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/SinglePointerPredictor.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/SinglePointerPredictor.java
@@ -49,8 +49,8 @@
     // Low value will use maximum prediction, high value will use no prediction.
     private static final float LOW_JANK = 0.02f;
     private static final float HIGH_JANK = 0.2f;
-    private static final float ACCURATE_LOW_JANK = 0.2f;
-    private static final float ACCURATE_HIGH_JANK = 1f;
+    private static final float ACCURATE_LOW_JANK = 0.1f;
+    private static final float ACCURATE_HIGH_JANK = 0.2f;
 
     // Range of pen speed to expect (in dp / ms).
     // Low value will not use prediction, high value will use full prediction.
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
index 973a7db..79d870d 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
@@ -40,7 +40,6 @@
  * A plugin which, when present, ensures that intermediate inspector
  * resources are generated at build time
  */
-@Suppress("SyntheticAccessor")
 class InspectionPlugin : Plugin<Project> {
     override fun apply(project: Project) {
         var foundLibraryPlugin = false
diff --git a/kruth/kruth/api/api_lint.ignore b/kruth/kruth/api/api_lint.ignore
index 196437b..57d2fb1 100644
--- a/kruth/kruth/api/api_lint.ignore
+++ b/kruth/kruth/api/api_lint.ignore
@@ -25,6 +25,8 @@
     Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.kruth.StandardSubjectBuilder.about(androidx.kruth.Subject.Factory<? extends S,T>)
 BuilderSetStyle: androidx.kruth.StandardSubjectBuilder#fail():
     Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.kruth.StandardSubjectBuilder.fail()
+BuilderSetStyle: androidx.kruth.StandardSubjectBuilder#forCustomFailureStrategy(androidx.kruth.FailureStrategy):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.kruth.StandardSubjectBuilder.forCustomFailureStrategy(androidx.kruth.FailureStrategy)
 BuilderSetStyle: androidx.kruth.StandardSubjectBuilder#that(Boolean):
     Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.kruth.StandardSubjectBuilder.that(Boolean)
 BuilderSetStyle: androidx.kruth.StandardSubjectBuilder#that(Double):
diff --git a/kruth/kruth/api/current.ignore b/kruth/kruth/api/current.ignore
index 2adc0e5..aae7d2b 100644
--- a/kruth/kruth/api/current.ignore
+++ b/kruth/kruth/api/current.ignore
@@ -125,8 +125,6 @@
 
 RemovedInterface: androidx.kruth.Fact:
     Class androidx.kruth.Fact no longer implements java.io.Serializable
-RemovedInterface: androidx.kruth.FailureStrategy:
-    Removed class androidx.kruth.FailureStrategy
 
 
 RemovedMethod: androidx.kruth.ComparableSubject#ComparableSubject(androidx.kruth.FailureMetadata, T):
@@ -161,8 +159,6 @@
     Removed method androidx.kruth.MapSubject.formattingDiffsUsing(androidx.kruth.Correspondence.DiffFormatter<? super V,? super V>)
 RemovedMethod: androidx.kruth.StandardSubjectBuilder#about(androidx.kruth.CustomSubjectBuilder.Factory<CustomSubjectBuilderT>):
     Removed method androidx.kruth.StandardSubjectBuilder.about(androidx.kruth.CustomSubjectBuilder.Factory<CustomSubjectBuilderT>)
-RemovedMethod: androidx.kruth.StandardSubjectBuilder#forCustomFailureStrategy(androidx.kruth.FailureStrategy):
-    Removed method androidx.kruth.StandardSubjectBuilder.forCustomFailureStrategy(androidx.kruth.FailureStrategy)
 RemovedMethod: androidx.kruth.StandardSubjectBuilder#withMessage(String, java.lang.Object...):
     Removed method androidx.kruth.StandardSubjectBuilder.withMessage(String,java.lang.Object...)
 RemovedMethod: androidx.kruth.StringSubject#StringSubject(androidx.kruth.FailureMetadata, String):
diff --git a/kruth/kruth/api/current.txt b/kruth/kruth/api/current.txt
index fe55142..967c8a5 100644
--- a/kruth/kruth/api/current.txt
+++ b/kruth/kruth/api/current.txt
@@ -54,10 +54,23 @@
   }
 
   public final class FailureMetadata {
-    method public java.util.List<java.lang.String> component1();
-    method public androidx.kruth.FailureMetadata copy(java.util.List<java.lang.String> messagesToPrepend);
+    method public androidx.kruth.FailureStrategy component1();
+    method public java.util.List<java.lang.String> component2();
+    method public androidx.kruth.FailureMetadata copy(androidx.kruth.FailureStrategy failureStrategy, java.util.List<java.lang.String> messagesToPrepend);
+    method public static androidx.kruth.FailureMetadata forFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
+    method public androidx.kruth.FailureStrategy getFailureStrategy();
     method public java.util.List<java.lang.String> getMessagesToPrepend();
+    property public final androidx.kruth.FailureStrategy failureStrategy;
     property public final java.util.List<java.lang.String> messagesToPrepend;
+    field public static final androidx.kruth.FailureMetadata.Companion Companion;
+  }
+
+  public static final class FailureMetadata.Companion {
+    method public androidx.kruth.FailureMetadata forFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
+  }
+
+  public fun interface FailureStrategy {
+    method public void fail(AssertionError failure);
   }
 
   public class IterableSubject<T> extends androidx.kruth.Subject<java.lang.Iterable<? extends T>> {
@@ -127,6 +140,7 @@
   public final class StandardSubjectBuilder {
     method public <T, S extends androidx.kruth.Subject<? extends T>> androidx.kruth.SimpleSubjectBuilder<S,T> about(androidx.kruth.Subject.Factory<? extends S,T> subjectFactory);
     method public Void fail();
+    method public static androidx.kruth.StandardSubjectBuilder? forCustomFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
     method public androidx.kruth.BooleanSubject that(Boolean? actual);
     method public androidx.kruth.DoubleSubject that(Double? actual);
     method public <T> androidx.kruth.IterableSubject<T> that(Iterable<? extends T>? actual);
@@ -136,6 +150,11 @@
     method public <T extends java.lang.Comparable<? super T>> androidx.kruth.ComparableSubject<T> that(T? actual);
     method public <T extends java.lang.Throwable> androidx.kruth.ThrowableSubject<T> that(T? actual);
     method public androidx.kruth.StandardSubjectBuilder withMessage(String messageToPrepend);
+    field public static final androidx.kruth.StandardSubjectBuilder.Companion Companion;
+  }
+
+  public static final class StandardSubjectBuilder.Companion {
+    method public androidx.kruth.StandardSubjectBuilder? forCustomFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
   }
 
   public final class StringSubject extends androidx.kruth.ComparableSubject<java.lang.String> {
diff --git a/kruth/kruth/api/restricted_current.ignore b/kruth/kruth/api/restricted_current.ignore
index 2adc0e5..aae7d2b 100644
--- a/kruth/kruth/api/restricted_current.ignore
+++ b/kruth/kruth/api/restricted_current.ignore
@@ -125,8 +125,6 @@
 
 RemovedInterface: androidx.kruth.Fact:
     Class androidx.kruth.Fact no longer implements java.io.Serializable
-RemovedInterface: androidx.kruth.FailureStrategy:
-    Removed class androidx.kruth.FailureStrategy
 
 
 RemovedMethod: androidx.kruth.ComparableSubject#ComparableSubject(androidx.kruth.FailureMetadata, T):
@@ -161,8 +159,6 @@
     Removed method androidx.kruth.MapSubject.formattingDiffsUsing(androidx.kruth.Correspondence.DiffFormatter<? super V,? super V>)
 RemovedMethod: androidx.kruth.StandardSubjectBuilder#about(androidx.kruth.CustomSubjectBuilder.Factory<CustomSubjectBuilderT>):
     Removed method androidx.kruth.StandardSubjectBuilder.about(androidx.kruth.CustomSubjectBuilder.Factory<CustomSubjectBuilderT>)
-RemovedMethod: androidx.kruth.StandardSubjectBuilder#forCustomFailureStrategy(androidx.kruth.FailureStrategy):
-    Removed method androidx.kruth.StandardSubjectBuilder.forCustomFailureStrategy(androidx.kruth.FailureStrategy)
 RemovedMethod: androidx.kruth.StandardSubjectBuilder#withMessage(String, java.lang.Object...):
     Removed method androidx.kruth.StandardSubjectBuilder.withMessage(String,java.lang.Object...)
 RemovedMethod: androidx.kruth.StringSubject#StringSubject(androidx.kruth.FailureMetadata, String):
diff --git a/kruth/kruth/api/restricted_current.txt b/kruth/kruth/api/restricted_current.txt
index f2de5fd..f4be2a8 100644
--- a/kruth/kruth/api/restricted_current.txt
+++ b/kruth/kruth/api/restricted_current.txt
@@ -54,10 +54,23 @@
   }
 
   public final class FailureMetadata {
-    method public java.util.List<java.lang.String> component1();
-    method public androidx.kruth.FailureMetadata copy(java.util.List<java.lang.String> messagesToPrepend);
+    method public androidx.kruth.FailureStrategy component1();
+    method public java.util.List<java.lang.String> component2();
+    method public androidx.kruth.FailureMetadata copy(androidx.kruth.FailureStrategy failureStrategy, java.util.List<java.lang.String> messagesToPrepend);
+    method public static androidx.kruth.FailureMetadata forFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
+    method public androidx.kruth.FailureStrategy getFailureStrategy();
     method public java.util.List<java.lang.String> getMessagesToPrepend();
+    property public final androidx.kruth.FailureStrategy failureStrategy;
     property public final java.util.List<java.lang.String> messagesToPrepend;
+    field public static final androidx.kruth.FailureMetadata.Companion Companion;
+  }
+
+  public static final class FailureMetadata.Companion {
+    method public androidx.kruth.FailureMetadata forFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
+  }
+
+  public fun interface FailureStrategy {
+    method public void fail(AssertionError failure);
   }
 
   public class IterableSubject<T> extends androidx.kruth.Subject<java.lang.Iterable<? extends T>> {
@@ -127,6 +140,7 @@
   public final class StandardSubjectBuilder {
     method public <T, S extends androidx.kruth.Subject<? extends T>> androidx.kruth.SimpleSubjectBuilder<S,T> about(androidx.kruth.Subject.Factory<? extends S,T> subjectFactory);
     method public Void fail();
+    method public static androidx.kruth.StandardSubjectBuilder? forCustomFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
     method public androidx.kruth.BooleanSubject that(Boolean? actual);
     method public androidx.kruth.DoubleSubject that(Double? actual);
     method public <T> androidx.kruth.IterableSubject<T> that(Iterable<? extends T>? actual);
@@ -136,6 +150,11 @@
     method public <T extends java.lang.Comparable<? super T>> androidx.kruth.ComparableSubject<T> that(T? actual);
     method public <T extends java.lang.Throwable> androidx.kruth.ThrowableSubject<T> that(T? actual);
     method public androidx.kruth.StandardSubjectBuilder withMessage(String messageToPrepend);
+    field public static final androidx.kruth.StandardSubjectBuilder.Companion Companion;
+  }
+
+  public static final class StandardSubjectBuilder.Companion {
+    method public androidx.kruth.StandardSubjectBuilder? forCustomFailureStrategy(androidx.kruth.FailureStrategy failureStrategy);
   }
 
   public final class StringSubject extends androidx.kruth.ComparableSubject<java.lang.String> {
diff --git a/kruth/kruth/src/commonMain/kotlin/androidx/kruth/FailureMetadata.kt b/kruth/kruth/src/commonMain/kotlin/androidx/kruth/FailureMetadata.kt
index 5d09c3f..d265d0e 100644
--- a/kruth/kruth/src/commonMain/kotlin/androidx/kruth/FailureMetadata.kt
+++ b/kruth/kruth/src/commonMain/kotlin/androidx/kruth/FailureMetadata.kt
@@ -16,9 +16,24 @@
 
 package androidx.kruth
 
+import kotlin.jvm.JvmStatic
+
 data class FailureMetadata internal constructor(
+    val failureStrategy: FailureStrategy = object : FailureStrategy {
+        override fun fail(failure: AssertionError) {
+            throw failure
+        }
+    },
     val messagesToPrepend: List<String> = emptyList(),
 ) {
+    companion object {
+        @JvmStatic
+        fun forFailureStrategy(failureStrategy: FailureStrategy): FailureMetadata {
+            return FailureMetadata(
+                failureStrategy
+            )
+        }
+    }
 
     internal fun withMessage(messageToPrepend: String): FailureMetadata =
         copy(messagesToPrepend = messagesToPrepend + messageToPrepend)
diff --git a/kruth/kruth/src/commonMain/kotlin/androidx/kruth/FailureStrategy.kt b/kruth/kruth/src/commonMain/kotlin/androidx/kruth/FailureStrategy.kt
new file mode 100644
index 0000000..6d9179b
--- /dev/null
+++ b/kruth/kruth/src/commonMain/kotlin/androidx/kruth/FailureStrategy.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.kruth
+
+/**
+ * Defines what to do when a check fails.
+ *
+ * This type does not appear directly in a fluent assertion chain, but you choose a
+ * [FailureStrategy] by choosing which method to call at the beginning of the chain.
+ *
+ * For people extending Kruth
+ *
+ * Custom [FailureStrategy] implementations are unusual. If you think you need one,
+ * consider these alternatives:
+ *
+ *   To test a custom subject, use [ExpectFailure].
+ *   To create subjects for other objects related to your actual value (for chained assertions),
+ *   use [Subject.check], which preserves the existing [FailureStrategy] and other context.
+ *
+ * When you really do need to create your own strategy, rather than expose your [FailureStrategy]
+ * instance to users, expose a [StandardSubjectBuilder] instance using
+ * [StandardSubjectBuilder.forCustomFailureStrategy].
+ */
+fun interface FailureStrategy {
+    /**
+     * Handles a failure. The parameter is an [AssertionError] or subclass thereof, and it
+     * contains information about the failure, which may include:
+     *
+     *   message: [Throwable.message]
+     *   cause: [Throwable.cause]
+     *
+     * We encourage implementations to record as much of this information as practical in the
+     * exceptions they may throw or the other records they may make.
+     */
+    fun fail(failure: AssertionError)
+}
diff --git a/kruth/kruth/src/commonMain/kotlin/androidx/kruth/StandardSubjectBuilder.kt b/kruth/kruth/src/commonMain/kotlin/androidx/kruth/StandardSubjectBuilder.kt
index dbc50ef..8f24a7c 100644
--- a/kruth/kruth/src/commonMain/kotlin/androidx/kruth/StandardSubjectBuilder.kt
+++ b/kruth/kruth/src/commonMain/kotlin/androidx/kruth/StandardSubjectBuilder.kt
@@ -16,6 +16,8 @@
 
 package androidx.kruth
 
+import kotlin.jvm.JvmStatic
+
 /**
  * In a fluent assertion chain, an object with which you can do any of the following:
  *
@@ -26,6 +28,15 @@
 class StandardSubjectBuilder internal constructor(
     private val metadata: FailureMetadata = FailureMetadata(),
 ) {
+    companion object {
+        /**
+         * Returns a new instance that invokes the given [FailureStrategy] when a check fails.
+         */
+        @JvmStatic
+        fun forCustomFailureStrategy(failureStrategy: FailureStrategy): StandardSubjectBuilder? {
+            return StandardSubjectBuilder(FailureMetadata.forFailureStrategy(failureStrategy))
+        }
+    }
 
     /**
      * Returns a new instance that will output the given message before the main failure message. If
diff --git a/leanback/leanback-preference/lint-baseline.xml b/leanback/leanback-preference/lint-baseline.xml
index e254a45..a587861 100644
--- a/leanback/leanback-preference/lint-baseline.xml
+++ b/leanback/leanback-preference/lint-baseline.xml
@@ -1,5 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="PreferenceFragment.getCallbackFragment can only be called from within the same library (androidx.preference:preference)"
+        errorLine1="    public Fragment getCallbackFragment() {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/leanback/preference/BaseLeanbackPreferenceFragment.java"/>
+    </issue>
 
     <issue
         id="UnknownNullness"
diff --git a/libraryversions.toml b/libraryversions.toml
index 554a046..3a94f1b 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,5 +1,5 @@
 [versions]
-ACTIVITY = "1.8.0-alpha06"
+ACTIVITY = "1.8.0-alpha07"
 ANNOTATION = "1.7.0-rc01"
 ANNOTATION_EXPERIMENTAL = "1.4.0-alpha01"
 APPACTIONS_BUILTINTYPES = "1.0.0-alpha01"
@@ -9,7 +9,7 @@
 ARCH_CORE = "2.3.0-alpha01"
 ASYNCLAYOUTINFLATER = "1.1.0-alpha02"
 AUTOFILL = "1.3.0-alpha02"
-BENCHMARK = "1.2.0-beta03"
+BENCHMARK = "1.2.0-beta04"
 BIOMETRIC = "1.2.0-alpha06"
 BLUETOOTH = "1.0.0-alpha01"
 BROWSER = "1.7.0-alpha01"
@@ -17,16 +17,16 @@
 CAMERA = "1.3.0-rc01"
 CAMERA_PIPE = "1.0.0-alpha01"
 CARDVIEW = "1.1.0-alpha01"
-CAR_APP = "1.4.0-beta01"
+CAR_APP = "1.4.0-beta02"
 COLLECTION = "1.4.0-alpha01"
-COMPOSE = "1.6.0-alpha03"
-COMPOSE_COMPILER = "1.5.1"
+COMPOSE = "1.6.0-alpha04"
+COMPOSE_COMPILER = "1.5.2"
 COMPOSE_MATERIAL3 = "1.2.0-alpha06"
 COMPOSE_MATERIAL3_ADAPTIVE = "1.0.0-alpha01"
 COMPOSE_RUNTIME_TRACING = "1.0.0-alpha04"
-CONSTRAINTLAYOUT = "2.2.0-alpha12"
-CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha12"
-CONSTRAINTLAYOUT_CORE = "1.1.0-alpha12"
+CONSTRAINTLAYOUT = "2.2.0-alpha13"
+CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha13"
+CONSTRAINTLAYOUT_CORE = "1.1.0-alpha13"
 CONTENTPAGER = "1.1.0-alpha01"
 COORDINATORLAYOUT = "1.3.0-alpha01"
 CORE = "1.13.0-alpha01"
@@ -57,7 +57,7 @@
 EMOJI2 = "1.5.0-alpha01"
 ENTERPRISE = "1.1.0-rc01"
 EXIFINTERFACE = "1.4.0-alpha01"
-FRAGMENT = "1.7.0-alpha02"
+FRAGMENT = "1.7.0-alpha03"
 FUTURES = "1.2.0-alpha02"
 GLANCE = "1.1.0-alpha01"
 GLANCE_PREVIEW = "1.0.0-alpha06"
@@ -69,9 +69,9 @@
 GRAPHICS_SHAPES = "1.0.0-alpha03"
 GRIDLAYOUT = "1.1.0-beta02"
 HEALTH_CONNECT = "1.1.0-alpha04"
-HEALTH_SERVICES_CLIENT = "1.1.0-alpha01"
+HEALTH_SERVICES_CLIENT = "1.1.0-alpha02"
 HEIFWRITER = "1.1.0-alpha03"
-HILT = "1.1.0-alpha01"
+HILT = "1.1.0-alpha02"
 HILT_NAVIGATION = "1.1.0-alpha03"
 HILT_NAVIGATION_COMPOSE = "1.1.0-alpha02"
 INPUT_MOTIONPREDICTION = "1.0.0-beta03"
@@ -100,10 +100,10 @@
 PREFERENCE = "1.3.0-alpha01"
 PRINT = "1.1.0-beta01"
 PRIVACYSANDBOX_ADS = "1.1.0-beta01"
-PRIVACYSANDBOX_PLUGINS = "1.0.0-alpha02"
-PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha08"
-PRIVACYSANDBOX_TOOLS = "1.0.0-alpha05"
-PRIVACYSANDBOX_UI = "1.0.0-alpha05"
+PRIVACYSANDBOX_PLUGINS = "1.0.0-alpha03"
+PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha09"
+PRIVACYSANDBOX_TOOLS = "1.0.0-alpha06"
+PRIVACYSANDBOX_UI = "1.0.0-alpha06"
 PROFILEINSTALLER = "1.4.0-alpha01"
 RECOMMENDATION = "1.1.0-alpha01"
 RECYCLERVIEW = "1.4.0-alpha01"
@@ -144,9 +144,9 @@
 VERSIONED_PARCELABLE = "1.2.0-alpha01"
 VIEWPAGER = "1.1.0-alpha02"
 VIEWPAGER2 = "1.1.0-beta03"
-WEAR = "1.3.0-rc01"
-WEAR_COMPOSE = "1.3.0-alpha03"
-WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha09"
+WEAR = "1.4.0-alpha01"
+WEAR_COMPOSE = "1.3.0-alpha04"
+WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha10"
 WEAR_INPUT = "1.2.0-alpha03"
 WEAR_INPUT_TESTING = "1.2.0-alpha03"
 WEAR_ONGOING = "1.1.0-alpha01"
diff --git a/lifecycle/buildSrc b/lifecycle/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/lifecycle/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/lifecycle/integration-tests/kotlintestapp/lint-baseline.xml b/lifecycle/integration-tests/kotlintestapp/lint-baseline.xml
new file mode 100644
index 0000000..a062d9e
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/lint-baseline.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Lifecycle.internalScopeRef can only be accessed from within the same library group (referenced groupId=`androidx.lifecycle` from groupId=`androidx.lifecycle.integration-tests`)"
+        errorLine1="        assertThat(owner.lifecycle.internalScopeRef.get()).isSameInstanceAs(scope)"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Lifecycle.internalScopeRef can only be accessed from within the same library group (referenced groupId=`androidx.lifecycle` from groupId=`androidx.lifecycle.integration-tests`)"
+        errorLine1="        assertThat(owner.lifecycle.internalScopeRef.get()).isSameInstanceAs(scope)"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt"/>
+    </issue>
+
+</issues>
diff --git a/lifecycle/lifecycle-livedata-core/lint-baseline.xml b/lifecycle/lifecycle-livedata-core/lint-baseline.xml
new file mode 100644
index 0000000..4808888e
--- /dev/null
+++ b/lifecycle/lifecycle-livedata-core/lint-baseline.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            new SafeIterableMap&lt;>();"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.iteratorWithAdditions can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="                        mObservers.iteratorWithAdditions(); iterator.hasNext(); ) {"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);"
+        errorLine2="                                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);"
+        errorLine2="                                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);"
+        errorLine2="                                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);"
+        errorLine2="                                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.remove can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper removed = mObservers.remove(observer);"
+        errorLine2="                                             ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.remove can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ObserverWrapper removed = mObservers.remove(observer);"
+        errorLine2="                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.postToMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.postToMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.size can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        return mObservers.size() > 0;"
+        errorLine2="                          ~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (!ArchTaskExecutor.getInstance().isMainThread()) {"
+        errorLine2="                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.isMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (!ArchTaskExecutor.getInstance().isMainThread()) {"
+        errorLine2="                                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveData.java"/>
+    </issue>
+
+</issues>
diff --git a/lifecycle/lifecycle-livedata-ktx/lint-baseline.xml b/lifecycle/lifecycle-livedata-ktx/lint-baseline.xml
new file mode 100644
index 0000000..20c2e81
--- /dev/null
+++ b/lifecycle/lifecycle-livedata-ktx/lint-baseline.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.isMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.isMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.isMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.isMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.isMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.isMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        if (ArchTaskExecutor.getInstance().isMainThread) {"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/FlowLiveData.kt"/>
+    </issue>
+
+</issues>
diff --git a/lifecycle/lifecycle-livedata/lint-baseline.xml b/lifecycle/lifecycle-livedata/lint-baseline.xml
new file mode 100644
index 0000000..66dcbba
--- /dev/null
+++ b/lifecycle/lifecycle-livedata/lint-baseline.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="    internal val executor: Executor = ArchTaskExecutor.getIOThreadExecutor()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/ComputableLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="    internal val executor: Executor = ArchTaskExecutor.getIOThreadExecutor()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/ComputableLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnMainThread(invalidationRunnable)"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/ComputableLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnMainThread(invalidationRunnable)"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/ComputableLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        ArchTaskExecutor.getInstance().executeOnMainThread(invalidationRunnable)"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/ComputableLiveData.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="    private SafeIterableMap&lt;LiveData&lt;?>, Source&lt;?>> mSources = new SafeIterableMap&lt;>();"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/MediatorLiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        Source&lt;?> existing = mSources.putIfAbsent(source, e);"
+        errorLine2="                                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/MediatorLiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        Source&lt;?> existing = mSources.putIfAbsent(source, e);"
+        errorLine2="                                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/MediatorLiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        Source&lt;?> existing = mSources.putIfAbsent(source, e);"
+        errorLine2="                                                          ~">
+        <location
+            file="src/main/java/androidx/lifecycle/MediatorLiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.remove can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        Source&lt;?> source = mSources.remove(toRemote);"
+        errorLine2="                                    ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/MediatorLiveData.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.remove can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        Source&lt;?> source = mSources.remove(toRemote);"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/MediatorLiveData.java"/>
+    </issue>
+
+</issues>
diff --git a/lifecycle/lifecycle-reactivestreams/lint-baseline.xml b/lifecycle/lifecycle-reactivestreams/lint-baseline.xml
new file mode 100644
index 0000000..9767dc0
--- /dev/null
+++ b/lifecycle/lifecycle-reactivestreams/lint-baseline.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            ArchTaskExecutor.getInstance().executeOnMainThread("
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            ArchTaskExecutor.getInstance().executeOnMainThread("
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="                Runnable {"
+        errorLine2="                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            ArchTaskExecutor.getInstance().executeOnMainThread {"
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            ArchTaskExecutor.getInstance().executeOnMainThread {"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            ArchTaskExecutor.getInstance().executeOnMainThread {"
+        errorLine2="                                                               ^">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getInstance can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            ArchTaskExecutor.getInstance()"
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="                .executeOnMainThread { // Errors should be handled upstream, so propagate as a crash."
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TaskExecutor.executeOnMainThread can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="                .executeOnMainThread { // Errors should be handled upstream, so propagate as a crash."
+        errorLine2="                                     ^">
+        <location
+            file="src/main/java/androidx/lifecycle/LiveDataReactiveStreams.kt"/>
+    </issue>
+
+</issues>
diff --git a/lifecycle/lifecycle-runtime/lint-baseline.xml b/lifecycle/lifecycle-runtime/lint-baseline.xml
new file mode 100644
index 0000000..38b0dba
--- /dev/null
+++ b/lifecycle/lifecycle-runtime/lint-baseline.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="    private var observerMap = FastSafeIterableMap&lt;LifecycleObserver, ObserverWithState>()"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            observerMap = FastSafeIterableMap()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.size can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            if (observerMap.size() == 0) {"
+        errorLine2="                            ~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.eldest can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            val eldestObserverState = observerMap.eldest()!!.value.state"
+        errorLine2="                                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.newest can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            val newestObserverState = observerMap.newest()!!.value.state"
+        errorLine2="                                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.ceil can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        val map = observerMap.ceil(observer)"
+        errorLine2="                              ~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        val previous = observerMap.putIfAbsent(observer, statefulObserver)"
+        errorLine2="                                   ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        val previous = observerMap.putIfAbsent(observer, statefulObserver)"
+        errorLine2="                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.putIfAbsent can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        val previous = observerMap.putIfAbsent(observer, statefulObserver)"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.contains can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        while (statefulObserver.state &lt; targetState &amp;&amp; observerMap.contains(observer)"
+        errorLine2="                                                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.remove can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        observerMap.remove(observer)"
+        errorLine2="                    ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.remove can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        observerMap.remove(observer)"
+        errorLine2="                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.size can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            return observerMap.size()"
+        errorLine2="                               ~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.iteratorWithAdditions can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            observerMap.iteratorWithAdditions()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.contains can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            while (observer.state &lt; state &amp;&amp; !newEventOccurred &amp;&amp; observerMap.contains(key)"
+        errorLine2="                                                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.descendingIterator can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="        val descendingIterator = observerMap.descendingIterator()"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FastSafeIterableMap.contains can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            while (observer.state > state &amp;&amp; !newEventOccurred &amp;&amp; observerMap.contains(key)"
+        errorLine2="                                                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.eldest can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            if (state &lt; observerMap.eldest()!!.value.state) {"
+        errorLine2="                                    ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap.newest can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.lifecycle`)"
+        errorLine1="            val newest = observerMap.newest()"
+        errorLine2="                                     ~~~~~~">
+        <location
+            file="src/main/java/androidx/lifecycle/LifecycleRegistry.kt"/>
+    </issue>
+
+</issues>
diff --git a/lifecycle/settings.gradle b/lifecycle/settings.gradle
index 87799dd..863f070b2 100644
--- a/lifecycle/settings.gradle
+++ b/lifecycle/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
@@ -37,4 +37,3 @@
         return false
     })
 }
-
diff --git a/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java b/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java
index fbc41d9..c01a837 100644
--- a/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java
+++ b/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java
@@ -55,7 +55,6 @@
 import static androidx.media.MediaSessionManager.RemoteUserInfo.UNKNOWN_PID;
 import static androidx.media.MediaSessionManager.RemoteUserInfo.UNKNOWN_UID;
 
-import android.annotation.SuppressLint;
 import android.app.Service;
 import android.content.Context;
 import android.content.Intent;
@@ -498,7 +497,6 @@
             }
 
             @Override
-            @SuppressLint("SyntheticAccessor")
             public MediaBrowserService.BrowserRoot onGetRoot(String clientPackageName,
                     int clientUid, Bundle rootHints) {
                 MediaSessionCompat.ensureClassLoader(rootHints);
diff --git a/media2/integration-tests/testapp/lint-baseline.xml b/media2/integration-tests/testapp/lint-baseline.xml
index 912b0ba..751410f 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.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="ClassVerificationFailure"
@@ -20,6 +20,24 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="MediaItem.getMediaId can only be called from within the same library group (referenced groupId=`androidx.media2` from groupId=`androidx.media2.integration-tests`)"
+        errorLine1="                    &amp;&amp; TextUtils.equals(currentItem.getMediaId(), mUri.toString())"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BaseResult.RESULT_SUCCESS can only be accessed from within the same library group (referenced groupId=`androidx.media2` from groupId=`androidx.media2.integration-tests`)"
+        errorLine1="                if (playerResult.getResultCode() != SessionPlayer.PlayerResult.RESULT_SUCCESS) {"
+        errorLine2="                                                                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/integration/testapp/VideoSessionService.java"/>
+    </issue>
+
+    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void onCreate(Bundle savedInstanceState) {"
diff --git a/media2/media2-common/lint-baseline.xml b/media2/media2-common/lint-baseline.xml
index d4ef3f4..34f7604 100644
--- a/media2/media2-common/lint-baseline.xml
+++ b/media2/media2-common/lint-baseline.xml
@@ -1,5 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelImpl can only be accessed from within the same library (androidx.versionedparcelable:versionedparcelable)"
+        errorLine1="        return (ParcelImpl) ParcelUtils.toParcelable(item);"
+        errorLine2="                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/common/MediaParcelUtils.java"/>
+    </issue>
 
     <issue
         id="KotlinPropertyAccess"
diff --git a/media2/media2-session/lint-baseline.xml b/media2/media2-session/lint-baseline.xml
index a9dff84..da49040 100644
--- a/media2/media2-session/lint-baseline.xml
+++ b/media2/media2-session/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="WrongConstant"
@@ -47,6 +47,24 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="MediaBrowserServiceCompat.onSubscribe can only be called from within the same library (androidx.media:media)"
+        errorLine1="    public void onSubscribe(final String id, final Bundle option) {"
+        errorLine2="                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/session/MediaLibraryServiceLegacyStub.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaBrowserServiceCompat.onUnsubscribe can only be called from within the same library (androidx.media:media)"
+        errorLine1="    public void onUnsubscribe(final String id) {"
+        errorLine2="                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/session/MediaLibraryServiceLegacyStub.java"/>
+    </issue>
+
+    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public void setTimeDiff(Long timeDiff) {"
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 2fad5d4..8f6116c 100644
--- a/media2/media2-session/version-compat-tests/common/lint-baseline.xml
+++ b/media2/media2-session/version-compat-tests/common/lint-baseline.xml
@@ -13,7 +13,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=""
+        errorLine1="interface IRemoteMediaBrowserCompat {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/media2/test/common/IRemoteMediaBrowserCompat.aidl"/>
@@ -22,7 +22,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=""
+        errorLine1="interface IRemoteMediaController {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/media2/test/common/IRemoteMediaController.aidl"/>
@@ -31,7 +31,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="    void create(String controllerId, in Bundle token, boolean waitForConnection);"
+        errorLine1="interface IRemoteMediaControllerCompat {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/media2/test/common/IRemoteMediaControllerCompat.aidl"/>
@@ -40,7 +40,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=""
+        errorLine1="interface IRemoteMediaSession {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/media2/test/common/IRemoteMediaSession.aidl"/>
@@ -49,7 +49,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="// This is to avoid making dependency of testlib module on media library."
+        errorLine1="interface IRemoteMediaSessionCompat {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/media2/test/common/IRemoteMediaSessionCompat.aidl"/>
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
index e2f4e1f..3e6004f 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
@@ -506,16 +506,14 @@
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             MediaRouter.RouteInfo route = getItem(position);
-            if (route.isEnabled()) {
-                ImageView iconView = view.findViewById(R.id.mr_chooser_route_icon);
-                ProgressBar progressBar = view.findViewById(R.id.mr_chooser_route_progress_bar);
-                // Show the progress bar
-                if (iconView != null && progressBar != null) {
-                    iconView.setVisibility(View.GONE);
-                    progressBar.setVisibility(View.VISIBLE);
-                }
-                route.select();
+            ImageView iconView = view.findViewById(R.id.mr_chooser_route_icon);
+            ProgressBar progressBar = view.findViewById(R.id.mr_chooser_route_progress_bar);
+            // Show the progress bar
+            if (iconView != null && progressBar != null) {
+                iconView.setVisibility(View.GONE);
+                progressBar.setVisibility(View.VISIBLE);
             }
+            route.select();
         }
 
         private Drawable getIconDrawable(MediaRouter.RouteInfo route) {
diff --git a/navigation/buildSrc b/navigation/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/navigation/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/navigation/navigation-fragment/lint-baseline.xml b/navigation/navigation-fragment/lint-baseline.xml
new file mode 100644
index 0000000..69f70619
--- /dev/null
+++ b/navigation/navigation-fragment/lint-baseline.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="                    if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="                if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="                    if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="                    if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="                if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="                            if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="                        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FragmentManager.isLoggingEnabled can only be called from within the same library (androidx.fragment:fragment)"
+        errorLine1="        if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/navigation/fragment/FragmentNavigator.kt"/>
+    </issue>
+
+</issues>
diff --git a/navigation/navigation-ui/src/main/java/androidx/navigation/ui/AppBarConfiguration.kt b/navigation/navigation-ui/src/main/java/androidx/navigation/ui/AppBarConfiguration.kt
index 827a259b..045acc5 100644
--- a/navigation/navigation-ui/src/main/java/androidx/navigation/ui/AppBarConfiguration.kt
+++ b/navigation/navigation-ui/src/main/java/androidx/navigation/ui/AppBarConfiguration.kt
@@ -15,7 +15,6 @@
  */
 package androidx.navigation.ui
 
-import android.annotation.SuppressLint
 import android.view.Menu
 import android.view.MenuItem
 import androidx.customview.widget.Openable
@@ -218,7 +217,7 @@
          *
          * @return a valid [AppBarConfiguration]
          */
-        @SuppressLint("SyntheticAccessor") /* new AppBarConfiguration() must be private to avoid
+        /* new AppBarConfiguration() must be private to avoid
                                               conflicting with the public AppBarConfiguration.kt */
         public fun build(): AppBarConfiguration {
             return AppBarConfiguration(
diff --git a/navigation/settings.gradle b/navigation/settings.gradle
index cd6ce31..8950e3c 100644
--- a/navigation/settings.gradle
+++ b/navigation/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/paging/buildSrc b/paging/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/paging/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/PagedListItemViewModel.java b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/PagedListItemViewModel.java
index 8457cd9..2dae5ba 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/PagedListItemViewModel.java
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/custom/PagedListItemViewModel.java
@@ -16,8 +16,6 @@
 
 package androidx.paging.integration.testapp.custom;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.ViewModel;
@@ -36,7 +34,6 @@
 
     private final Function0<PagingSource<Integer, Item>> mFactory =
             new Function0<PagingSource<Integer, Item>>() {
-                @SuppressLint("SyntheticAccessor")
                 @NonNull
                 @Override
                 public PagingSource<Integer, Item> invoke() {
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageFetcherSnapshotState.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageFetcherSnapshotState.kt
index e72df74..a7a7f16 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageFetcherSnapshotState.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageFetcherSnapshotState.kt
@@ -378,7 +378,6 @@
      * Wrapper for [PageFetcherSnapshotState], which protects access behind a [Mutex] to prevent
      * race scenarios.
      */
-    @Suppress("SyntheticAccessor")
     internal class Holder<Key : Any, Value : Any>(
         private val config: PagingConfig
     ) {
diff --git a/paging/paging-compose/src/androidAndroidTest/kotlin/androidx/paging/compose/LazyPagingItemsTest.kt b/paging/paging-compose/src/androidAndroidTest/kotlin/androidx/paging/compose/LazyPagingItemsTest.kt
index b0c4f3b..76209f0 100644
--- a/paging/paging-compose/src/androidAndroidTest/kotlin/androidx/paging/compose/LazyPagingItemsTest.kt
+++ b/paging/paging-compose/src/androidAndroidTest/kotlin/androidx/paging/compose/LazyPagingItemsTest.kt
@@ -56,6 +56,7 @@
 import kotlinx.coroutines.test.StandardTestDispatcher
 import kotlinx.coroutines.test.TestScope
 import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -975,6 +976,7 @@
         }
     }
 
+    @Ignore // b/294941531
     @Test
     fun cachedData_loadStates() {
         val flow = createPager().flow.cachedIn(TestScope(UnconfinedTestDispatcher()))
diff --git a/paging/paging-runtime/lint-baseline.xml b/paging/paging-runtime/lint-baseline.xml
new file mode 100644
index 0000000..208e816
--- /dev/null
+++ b/paging/paging-runtime/lint-baseline.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getMainThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="    internal var mainThreadExecutor = ArchTaskExecutor.getMainThreadExecutor()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/AsyncPagedListDiffer.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="    fetchExecutor: Executor = ArchTaskExecutor.getIOThreadExecutor()"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedList.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="    fetchExecutor: Executor = ArchTaskExecutor.getIOThreadExecutor()"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedList.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="    fetchDispatcher: CoroutineDispatcher = ArchTaskExecutor.getIOThreadExecutor()"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedList.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getMainThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="        ArchTaskExecutor.getMainThreadExecutor().asCoroutineDispatcher(),"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedList.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="    fetchDispatcher: CoroutineDispatcher = ArchTaskExecutor.getIOThreadExecutor()"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedList.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getMainThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="        ArchTaskExecutor.getMainThreadExecutor().asCoroutineDispatcher(),"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedList.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="    private var fetchDispatcher = ArchTaskExecutor.getIOThreadExecutor().asCoroutineDispatcher()"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedListBuilder.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getMainThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.paging`)"
+        errorLine1="            ArchTaskExecutor.getMainThreadExecutor().asCoroutineDispatcher(),"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/paging/LivePagedListBuilder.kt"/>
+    </issue>
+
+</issues>
diff --git a/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt b/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt
index 742eadd..7de466d 100644
--- a/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt
+++ b/paging/samples/src/main/java/androidx/paging/samples/CachedInSample.kt
@@ -18,7 +18,6 @@
 
 package androidx.paging.samples
 
-import android.annotation.SuppressLint
 import android.os.Bundle
 import androidx.activity.viewModels
 import androidx.annotation.Sampled
@@ -42,7 +41,6 @@
 private lateinit var pagingSourceFactory: () -> PagingSource<String, String>
 
 @Sampled
-@SuppressLint("SyntheticAccessor")
 fun cachedInSample() {
     class MyViewModel : ViewModel() {
         val flow = Pager(
diff --git a/paging/settings.gradle b/paging/settings.gradle
index f7321cb..80da671 100644
--- a/paging/settings.gradle
+++ b/paging/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
@@ -37,4 +37,3 @@
         return false
     })
 }
-
diff --git a/playground-common/configure-plugin-management.gradle b/playground-common/configure-plugin-management.gradle
new file mode 100644
index 0000000..7013dc1
--- /dev/null
+++ b/playground-common/configure-plugin-management.gradle
@@ -0,0 +1,11 @@
+// configures the pluginManagement section of the settings file.
+// each settings file applies this to its pluginManagement block so that we can
+// do common configuration in 1 place before plugin classpaths are loaded.
+
+def srcFile = buildscript.getSourceFile()
+includeBuild new File(srcFile.parentFile, "playground-plugin").canonicalPath
+repositories {
+    mavenCentral()
+    google()
+    gradlePluginPortal()
+}
diff --git a/playground-common/gradle/wrapper/gradle-wrapper.properties b/playground-common/gradle/wrapper/gradle-wrapper.properties
index 4d7e410..a1332968 100644
--- a/playground-common/gradle/wrapper/gradle-wrapper.properties
+++ b/playground-common/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-rc-2-bin.zip
-distributionSha256Sum=222818637ce0a4cb82e322bf847ea49ac319aecdb363d81acabd9e81315d08f6
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
+distributionSha256Sum=591855b517fc635b9e04de1d05d5e76ada3f89f5fc76f87978d1b245b4f69225
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/playground-common/playground-plugin/build.gradle b/playground-common/playground-plugin/build.gradle
index 83996d6..4df0dee 100644
--- a/playground-common/playground-plugin/build.gradle
+++ b/playground-common/playground-plugin/build.gradle
@@ -22,6 +22,9 @@
 dependencies {
     implementation("com.gradle:gradle-enterprise-gradle-plugin:3.14.1")
     implementation("com.gradle:common-custom-user-data-gradle-plugin:1.11.1")
+    implementation("supportBuildSrc:private")
+    implementation("supportBuildSrc:public")
+    implementation("supportBuildSrc:plugins")
     testImplementation(libs.junit)
     testImplementation(libs.truth)
 }
diff --git a/playground-common/playground-plugin/settings.gradle b/playground-common/playground-plugin/settings.gradle
index 569158b..75286cc 100644
--- a/playground-common/playground-plugin/settings.gradle
+++ b/playground-common/playground-plugin/settings.gradle
@@ -17,6 +17,7 @@
 pluginManagement {
     repositories {
         mavenCentral()
+        google()
         gradlePluginPortal().content {
             it.includeModule("org.jetbrains.kotlin.jvm", "org.jetbrains.kotlin.jvm.gradle.plugin")
         }
@@ -26,6 +27,7 @@
 dependencyResolutionManagement {
     repositories {
         mavenCentral()
+        google()
         gradlePluginPortal().content {
             it.includeModule("com.gradle", "gradle-enterprise-gradle-plugin")
             it.includeModule("com.gradle", "common-custom-user-data-gradle-plugin")
@@ -33,8 +35,17 @@
     }
 }
 
+System.setProperty("ALLOW_PUBLIC_REPOS", "true")
 rootProject.name = "playground-plugin"
-
+includeBuild("../../buildSrc") {
+    // cannot use name buildSrc, it is reserved.
+    name = "supportBuildSrc"
+    dependencySubstitution {
+        substitute module('supportBuildSrc:public') using project(':public')
+        substitute module('supportBuildSrc:private') using project(':private')
+        substitute module('supportBuildSrc:plugins') using project(':plugins')
+    }
+}
 // Build cache configuration is duplicated here from the GradleEnterpriseConventionsPlugin,
 // so that when building the `playground-plugin` included build the same build cache settings will be used.
 // Without this, Gradle Enterprise erroneously reports a problem with 'buildSrc' build cache configuration.
diff --git a/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundExtension.kt b/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundExtension.kt
index a16c9d1..bad82a7 100644
--- a/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundExtension.kt
+++ b/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundExtension.kt
@@ -17,11 +17,11 @@
 package androidx.playground
 
 import androidx.build.SettingsParser
-import org.gradle.api.GradleException
-import org.gradle.api.initialization.Settings
 import java.io.File
 import java.util.Properties
 import javax.inject.Inject
+import org.gradle.api.GradleException
+import org.gradle.api.initialization.Settings
 
 open class PlaygroundExtension @Inject constructor(
     private val settings: Settings
diff --git a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt
index ee38558..fd13072 100644
--- a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt
+++ b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt
@@ -463,11 +463,11 @@
     }
 
     /**
-     * Ensures that ACTIVE will only be sent to registered state change listeners after the first
-     * draw event.
+     * Ensures that ACTIVE will only be sent to registered state change listeners after the next
+     * frame commit.
      */
     @Test
-    fun activeStateOnlySentAfterFirstDraw() {
+    fun activeStateOnlySentAfterNextFrameCommitted() {
         addViewToLayout()
         var latch = CountDownLatch(1)
         view.addStateChangedListener {
@@ -478,7 +478,7 @@
         assertThat(latch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
 
         // Manually set state to IDLE.
-        // Subsequent draw events should not flip the state back to ACTIVE.
+        // Subsequent frame commits should not flip the state back to ACTIVE.
         view.stateListenerManager.currentUiSessionState = SandboxedSdkUiSessionState.Idle
         latch = CountDownLatch(1)
         assertThat(latch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
index 71dbb5c..bbf3694 100644
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
+++ b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
@@ -24,7 +24,6 @@
 import android.view.SurfaceView
 import android.view.View
 import android.view.ViewGroup
-import android.view.ViewTreeObserver
 import androidx.annotation.RequiresApi
 import androidx.privacysandbox.ui.core.SandboxedUiAdapter
 import java.util.concurrent.CopyOnWriteArrayList
@@ -216,25 +215,11 @@
         } else {
             super.addView(contentView, 0, contentView.layoutParams)
         }
-        // Listen for first draw event before sending an ACTIVE state change to listeners. Removes
-        // the listener afterwards so that we don't handle multiple draw events.
-        viewTreeObserver.addOnDrawListener(
-            object : ViewTreeObserver.OnDrawListener {
-                var handledDraw = false
-
-                override fun onDraw() {
-                    if (!handledDraw) {
-                        stateListenerManager.currentUiSessionState =
-                            SandboxedSdkUiSessionState.Active
-                        post {
-                            // Posted to handler as this can't be directly called from onDraw
-                            viewTreeObserver.removeOnDrawListener(this)
-                        }
-                        handledDraw = true
-                    }
-                }
-            }
-        )
+        // Wait for the next frame commit before sending an ACTIVE state change to listeners.
+        viewTreeObserver.registerFrameCommitCallback {
+            stateListenerManager.currentUiSessionState =
+                SandboxedSdkUiSessionState.Active
+        }
     }
 
     internal fun onClientClosedSession(error: Throwable? = null) {
diff --git a/privacysandbox/ui/ui-core/lint-baseline.xml b/privacysandbox/ui/ui-core/lint-baseline.xml
index e00c3bf..263abb0 100644
--- a/privacysandbox/ui/ui-core/lint-baseline.xml
+++ b/privacysandbox/ui/ui-core/lint-baseline.xml
@@ -13,7 +13,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="    void notifyResized(int width, int height);"
+        errorLine1="oneway interface IRemoteSessionController {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/privacysandbox/ui/core/IRemoteSessionController.aidl"/>
@@ -22,7 +22,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import android.content.Context;"
+        errorLine1="oneway interface ISandboxedUiAdapter {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/privacysandbox/ui/core/ISandboxedUiAdapter.aidl"/>
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java
index 4dbe70e..e840591 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java
@@ -321,7 +321,8 @@
             public void run() {
                 RecyclerView.OnScrollListener listener = new RecyclerView.OnScrollListener() {
                     @Override
-                    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+                    public void onScrollStateChanged(@NonNull RecyclerView recyclerView,
+                            int newState) {
                         if (newState == SCROLL_STATE_IDLE) {
                             latch.countDown();
                             recyclerView.removeOnScrollListener(this);
@@ -336,6 +337,14 @@
             }
         });
         assertTrue("should go idle in 10 seconds", latch.await(10, TimeUnit.SECONDS));
+
+        // Avoid thread-safety issues
+        // The scroll listener is not necessarily called after all relevant UI-thread changes, so
+        // we need to wait for the UI thread to finish what it's doing in order to avoid flakiness.
+        // Note that this runOnUiThread is a no-op if called from the UI thread, but that's okay
+        // because waitForIdleScroll doesn't work on the UI thread (the latch would deadlock if
+        // the scroll wasn't already idle).
+        mActivityRule.runOnUiThread(() -> {});
     }
 
     public boolean requestFocus(final View view, boolean waitForScroll) throws Throwable {
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewOnGenericMotionEventTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewOnGenericMotionEventTest.java
index 84d1fb3..e164745 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewOnGenericMotionEventTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewOnGenericMotionEventTest.java
@@ -32,7 +32,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.Px;
-import androidx.core.view.DifferentialMotionFlingHelper;
+import androidx.core.view.DifferentialMotionFlingController;
+import androidx.core.view.DifferentialMotionFlingTarget;
 import androidx.core.view.InputDeviceCompat;
 import androidx.core.view.ViewConfigurationCompat;
 import androidx.test.core.app.ApplicationProvider;
@@ -48,13 +49,13 @@
 public class RecyclerViewOnGenericMotionEventTest {
 
     TestRecyclerView mRecyclerView;
-    TestDifferentialMotionFlingHelper mFlingHelper;
+    TestDifferentialMotionFlingController mFlingController;
 
     @Before
     public void setUp() throws Exception {
         mRecyclerView = new TestRecyclerView(getContext());
-        mFlingHelper = createDummyFlingHelper();
-        mRecyclerView.mDifferentialMotionFlingHelper = mFlingHelper;
+        mFlingController = createDummyFlingController();
+        mRecyclerView.mDifferentialMotionFlingController = mFlingController;
     }
 
     private Context getContext() {
@@ -77,8 +78,8 @@
 
         assertTotalScroll(0, (int) (-2f * getScaledVerticalScrollFactor()),
                 /* assertSmoothScroll= */ false);
-        assertEquals(MotionEvent.AXIS_SCROLL, mFlingHelper.mLastAxis);
-        assertEquals(mRecyclerView.mLastGenericMotionEvent, mFlingHelper.mLastMotionEvent);
+        assertEquals(MotionEvent.AXIS_SCROLL, mFlingController.mLastAxis);
+        assertEquals(mRecyclerView.mLastGenericMotionEvent, mFlingController.mLastMotionEvent);
     }
 
     @Test
@@ -95,8 +96,8 @@
 
         assertTotalScroll((int) (2f * getScaledHorizontalScrollFactor()), 0,
                 /* assertSmoothScroll= */ false);
-        assertEquals(MotionEvent.AXIS_SCROLL, mFlingHelper.mLastAxis);
-        assertEquals(mRecyclerView.mLastGenericMotionEvent, mFlingHelper.mLastMotionEvent);
+        assertEquals(MotionEvent.AXIS_SCROLL, mFlingController.mLastAxis);
+        assertEquals(mRecyclerView.mLastGenericMotionEvent, mFlingController.mLastMotionEvent);
     }
 
     @Test
@@ -109,7 +110,7 @@
                 MotionEvent.AXIS_SCROLL, 2, InputDeviceCompat.SOURCE_ROTARY_ENCODER, mRecyclerView);
         assertTotalScroll(0, (int) (-2f * getScaledVerticalScrollFactor()),
                 /* assertSmoothScroll= */ true);
-        assertNull(mFlingHelper.mLastMotionEvent);
+        assertNull(mFlingController.mLastMotionEvent);
     }
 
     @Test
@@ -145,7 +146,7 @@
                 MotionEvent.AXIS_SCROLL, 2, InputDeviceCompat.SOURCE_ROTARY_ENCODER, mRecyclerView);
         assertTotalScroll((int) (2f * getScaledHorizontalScrollFactor()), 0,
                 /* assertSmoothScroll= */ true);
-        assertNull(mFlingHelper.mLastMotionEvent);
+        assertNull(mFlingController.mLastMotionEvent);
     }
 
     @Test
@@ -341,10 +342,10 @@
         }
     }
 
-    private TestDifferentialMotionFlingHelper createDummyFlingHelper() {
-        return new TestDifferentialMotionFlingHelper(
+    private TestDifferentialMotionFlingController createDummyFlingController() {
+        return new TestDifferentialMotionFlingController(
                 mRecyclerView.getContext(),
-                new DifferentialMotionFlingHelper.DifferentialMotionFlingTarget() {
+                new DifferentialMotionFlingTarget() {
                     @Override
                     public boolean startDifferentialMotionFling(float velocity) {
                         return false;
@@ -360,12 +361,13 @@
                 });
     }
 
-    private static class TestDifferentialMotionFlingHelper extends DifferentialMotionFlingHelper {
+    private static class TestDifferentialMotionFlingController extends
+            DifferentialMotionFlingController {
         MotionEvent mLastMotionEvent;
         int mLastAxis;
 
-        TestDifferentialMotionFlingHelper(Context context,
-                DifferentialMotionFlingHelper.DifferentialMotionFlingTarget target) {
+        TestDifferentialMotionFlingController(Context context,
+                DifferentialMotionFlingTarget target) {
             super(context, target);
         }
 
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/BatchingListUpdateCallback.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/BatchingListUpdateCallback.java
index bad8cc9..7020eb1 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/BatchingListUpdateCallback.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/BatchingListUpdateCallback.java
@@ -73,6 +73,7 @@
         mLastEventType = TYPE_NONE;
     }
 
+    /** {@inheritDoc} */
     @Override
     public void onInserted(int position, int count) {
         if (mLastEventType == TYPE_ADD && position >= mLastEventPosition
@@ -87,6 +88,7 @@
         mLastEventType = TYPE_ADD;
     }
 
+    /** {@inheritDoc} */
     @Override
     public void onRemoved(int position, int count) {
         if (mLastEventType == TYPE_REMOVE && mLastEventPosition >= position &&
@@ -101,12 +103,14 @@
         mLastEventType = TYPE_REMOVE;
     }
 
+    /** {@inheritDoc} */
     @Override
     public void onMoved(int fromPosition, int toPosition) {
         dispatchLastEvent(); // moves are not merged
         mWrapped.onMoved(fromPosition, toPosition);
     }
 
+    /** {@inheritDoc} */
     @Override
     @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
     public void onChanged(int position, int count, Object payload) {
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java
index a520aa9..d92a1a6 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/DefaultItemAnimator.java
@@ -99,6 +99,7 @@
         }
     }
 
+    /** {@inheritDoc} */
     @Override
     public void runPendingAnimations() {
         boolean removalsPending = !mPendingRemovals.isEmpty();
@@ -190,6 +191,7 @@
         }
     }
 
+    /** {@inheritDoc} */
     @Override
     @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
     public boolean animateRemove(final RecyclerView.ViewHolder holder) {
@@ -220,6 +222,7 @@
                 }).start();
     }
 
+    /** {@inheritDoc} */
     @Override
     @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
     public boolean animateAdd(final RecyclerView.ViewHolder holder) {
@@ -255,6 +258,7 @@
                 }).start();
     }
 
+    /** {@inheritDoc} */
     @Override
     @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
     public boolean animateMove(final RecyclerView.ViewHolder holder, int fromX, int fromY,
@@ -320,6 +324,7 @@
         }).start();
     }
 
+    /** {@inheritDoc} */
     @Override
     @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
     public boolean animateChange(RecyclerView.ViewHolder oldHolder,
@@ -438,6 +443,7 @@
         return true;
     }
 
+    /** {@inheritDoc} */
     @Override
     @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
     public void endAnimation(RecyclerView.ViewHolder item) {
@@ -533,6 +539,7 @@
         endAnimation(holder);
     }
 
+    /** {@inheritDoc} */
     @Override
     public boolean isRunning() {
         return (!mPendingAdditions.isEmpty()
@@ -559,6 +566,7 @@
         }
     }
 
+    /** {@inheritDoc} */
     @Override
     public void endAnimations() {
         int count = mPendingMoves.size();
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ListUpdateCallback.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ListUpdateCallback.java
index ed8e7fc..763fcb9 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ListUpdateCallback.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ListUpdateCallback.java
@@ -52,6 +52,7 @@
      *
      * @param position The position of the item which has been updated.
      * @param count    The number of items which has changed.
+     * @param payload  The payload for the changed items.
      */
     void onChanged(int position, int count, @Nullable Object payload);
 }
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
index 30b7694..16d96e4 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
@@ -72,7 +72,8 @@
 import androidx.core.os.TraceCompat;
 import androidx.core.util.Preconditions;
 import androidx.core.view.AccessibilityDelegateCompat;
-import androidx.core.view.DifferentialMotionFlingHelper;
+import androidx.core.view.DifferentialMotionFlingController;
+import androidx.core.view.DifferentialMotionFlingTarget;
 import androidx.core.view.InputDeviceCompat;
 import androidx.core.view.MotionEventCompat;
 import androidx.core.view.NestedScrollingChild2;
@@ -750,9 +751,9 @@
                 }
             };
 
-    private final DifferentialMotionFlingHelper.DifferentialMotionFlingTarget
+    private final DifferentialMotionFlingTarget
             mDifferentialMotionFlingTarget =
-            new DifferentialMotionFlingHelper.DifferentialMotionFlingTarget() {
+            new DifferentialMotionFlingTarget() {
                 @Override
                 public boolean startDifferentialMotionFling(float velocity) {
                     int vx = 0;
@@ -792,8 +793,8 @@
             };
 
     @VisibleForTesting
-    DifferentialMotionFlingHelper mDifferentialMotionFlingHelper =
-            new DifferentialMotionFlingHelper(getContext(), mDifferentialMotionFlingTarget);
+    DifferentialMotionFlingController mDifferentialMotionFlingController =
+            new DifferentialMotionFlingController(getContext(), mDifferentialMotionFlingTarget);
     public RecyclerView(@NonNull Context context) {
         this(context, null);
     }
@@ -4145,7 +4146,7 @@
             }
 
             if (flingAxis != 0 && !useSmoothScroll) {
-                mDifferentialMotionFlingHelper.onMotionEvent(event, flingAxis);
+                mDifferentialMotionFlingController.onMotionEvent(event, flingAxis);
             }
         }
         return false;
@@ -10876,6 +10877,7 @@
          * <p>The base implementation will attempt to perform a standard programmatic scroll
          * to bring the given rect into view, within the padded area of the RecyclerView.</p>
          *
+         * @param parent    The parent RecyclerView.
          * @param child     The direct child making the request.
          * @param rect      The rectangle in the child's coordinates the child
          *                  wishes to be on the screen.
@@ -11852,6 +11854,7 @@
          * in the order in which each listener was added, before any other touch processing
          * by the RecyclerView itself or child views occurs.</p>
          *
+         * @param rv The RecyclerView whose scroll state has changed.
          * @param e MotionEvent describing the touch event. All coordinates are in
          *          the RecyclerView's coordinate system.
          * @return true if this OnItemTouchListener wishes to begin intercepting touch events, false
@@ -11864,6 +11867,7 @@
          * Process a touch event as part of a gesture that was claimed by returning true from
          * a previous call to {@link #onInterceptTouchEvent}.
          *
+         * @param rv The RecyclerView whose scroll state has changed.
          * @param e MotionEvent describing the touch event. All coordinates are in
          *          the RecyclerView's coordinate system.
          */
@@ -11891,15 +11895,18 @@
      * you update to a new version of the support library.
      */
     public static class SimpleOnItemTouchListener implements RecyclerView.OnItemTouchListener {
+        /** {@inheritDoc} */
         @Override
         public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
             return false;
         }
 
+        /** {@inheritDoc} */
         @Override
         public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
         }
 
+        /** {@inheritDoc} */
         @Override
         public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
         }
@@ -12142,10 +12149,10 @@
             this.itemView = itemView;
         }
 
-        void flagRemovedAndOffsetPosition(int mNewPosition, int offset, boolean applyToPreLayout) {
+        void flagRemovedAndOffsetPosition(int newPosition, int offset, boolean applyToPreLayout) {
             addFlags(ViewHolder.FLAG_REMOVED);
             offsetPosition(offset, applyToPreLayout);
-            mPosition = mNewPosition;
+            mPosition = newPosition;
         }
 
         void offsetPosition(int offset, boolean applyToPreLayout) {
@@ -14677,6 +14684,7 @@
          * if you want to change the drawing order of children. By default, it
          * returns i.
          *
+         * @param childCount The total number of children.
          * @param i The current iteration.
          * @return The index of the child to draw this iteration.
          * @see RecyclerView#setChildDrawingOrderCallback(RecyclerView.ChildDrawingOrderCallback)
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java
index 4dc33c6..dd01532 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SimpleItemAnimator.java
@@ -230,6 +230,10 @@
      * then start the animations together in the later call to {@link #runPendingAnimations()}.
      *
      * @param holder The item that is being moved.
+     * @param fromX x coordinate from which to start animation.
+     * @param fromY y coordinate from which to start animation.
+     * @param toX x coordinate at which to end animation.
+     * @param toY y coordinate at which to end animation.
      * @return true if a later call to {@link #runPendingAnimations()} is requested,
      * false otherwise.
      */
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedList.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedList.java
index 3ae96b8..80bf952 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedList.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedList.java
@@ -863,6 +863,7 @@
          */
         abstract public void onChanged(int position, int count);
 
+        /** {@inheritDoc} */
         @Override
         @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
         public void onChanged(int position, int count, Object payload) {
@@ -957,47 +958,56 @@
             mBatchingListUpdateCallback = new BatchingListUpdateCallback(mWrappedCallback);
         }
 
+        /** {@inheritDoc} */
         @Override
         public int compare(T2 o1, T2 o2) {
             return mWrappedCallback.compare(o1, o2);
         }
 
+        /** {@inheritDoc} */
         @Override
         public void onInserted(int position, int count) {
             mBatchingListUpdateCallback.onInserted(position, count);
         }
 
+        /** {@inheritDoc} */
         @Override
         public void onRemoved(int position, int count) {
             mBatchingListUpdateCallback.onRemoved(position, count);
         }
 
+        /** {@inheritDoc} */
         @Override
         public void onMoved(int fromPosition, int toPosition) {
             mBatchingListUpdateCallback.onMoved(fromPosition, toPosition);
         }
 
+        /** {@inheritDoc} */
         @Override
         public void onChanged(int position, int count) {
             mBatchingListUpdateCallback.onChanged(position, count, null);
         }
 
+        /** {@inheritDoc} */
         @Override
         @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
         public void onChanged(int position, int count, Object payload) {
             mBatchingListUpdateCallback.onChanged(position, count, payload);
         }
 
+        /** {@inheritDoc} */
         @Override
         public boolean areContentsTheSame(T2 oldItem, T2 newItem) {
             return mWrappedCallback.areContentsTheSame(oldItem, newItem);
         }
 
+        /** {@inheritDoc} */
         @Override
         public boolean areItemsTheSame(T2 item1, T2 item2) {
             return mWrappedCallback.areItemsTheSame(item1, item2);
         }
 
+        /** {@inheritDoc} */
         @Nullable
         @Override
         public Object getChangePayload(T2 item1, T2 item2) {
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedListAdapterCallback.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedListAdapterCallback.java
index 639a26a..a774750 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedListAdapterCallback.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/SortedListAdapterCallback.java
@@ -39,26 +39,31 @@
         mAdapter = adapter;
     }
 
+    /** {@inheritDoc} */
     @Override
     public void onInserted(int position, int count) {
         mAdapter.notifyItemRangeInserted(position, count);
     }
 
+    /** {@inheritDoc} */
     @Override
     public void onRemoved(int position, int count) {
         mAdapter.notifyItemRangeRemoved(position, count);
     }
 
+    /** {@inheritDoc} */
     @Override
     public void onMoved(int fromPosition, int toPosition) {
         mAdapter.notifyItemMoved(fromPosition, toPosition);
     }
 
+    /** {@inheritDoc} */
     @Override
     public void onChanged(int position, int count) {
         mAdapter.notifyItemRangeChanged(position, count);
     }
 
+    /** {@inheritDoc} */
     @Override
     @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
     public void onChanged(int position, int count, Object payload) {
diff --git a/room/buildSrc b/room/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/room/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/room/integration-tests/kotlintestapp/lint-baseline.xml b/room/integration-tests/kotlintestapp/lint-baseline.xml
index 487b561..67ac82c 100644
--- a/room/integration-tests/kotlintestapp/lint-baseline.xml
+++ b/room/integration-tests/kotlintestapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-beta03" type="baseline" client="cli" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
@@ -64,4 +64,31 @@
             file="src/androidTest/java/androidx/room/integration/kotlintestapp/test/Rx3PagingSourceTest.kt"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="CursorUtil.useCursor can only be called from within the same library group prefix (referenced groupId=`androidx.room` with prefix androidx from groupId=`androidx.room.integration-tests`)"
+        errorLine1="                getUsers().useCursor {"
+        errorLine2="                ~~~~~~~~">
+        <location
+            file="src/androidTestWithKspGenJava/java/androidx/room/integration/kotlintestapp/NullabilityAwareTypeConversionTest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CursorUtil.useCursor can only be called from within the same library group prefix (referenced groupId=`androidx.room` with prefix androidx from groupId=`androidx.room.integration-tests`)"
+        errorLine1="                getUsers().useCursor {"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/androidTestWithKspGenJava/java/androidx/room/integration/kotlintestapp/NullabilityAwareTypeConversionTest.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CursorUtil.useCursor can only be called from within the same library group prefix (referenced groupId=`androidx.room` with prefix androidx from groupId=`androidx.room.integration-tests`)"
+        errorLine1="                getUsers().useCursor {"
+        errorLine2="                                     ^">
+        <location
+            file="src/androidTestWithKspGenJava/java/androidx/room/integration/kotlintestapp/NullabilityAwareTypeConversionTest.kt"/>
+    </issue>
+
 </issues>
diff --git a/room/room-common/api/current.ignore b/room/room-common/api/current.ignore
deleted file mode 100644
index f946bb2..0000000
--- a/room/room-common/api/current.ignore
+++ /dev/null
@@ -1,9 +0,0 @@
-// Baseline format: 1.0
-ParameterNameChange: androidx.room.BuiltInTypeConverters.State#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.BuiltInTypeConverters.State.valueOf
-ParameterNameChange: androidx.room.FtsOptions.MatchInfo#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.FtsOptions.MatchInfo.valueOf
-ParameterNameChange: androidx.room.FtsOptions.Order#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.FtsOptions.Order.valueOf
-ParameterNameChange: androidx.room.Index.Order#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.Index.Order.valueOf
diff --git a/room/room-common/api/restricted_current.ignore b/room/room-common/api/restricted_current.ignore
deleted file mode 100644
index f946bb2..0000000
--- a/room/room-common/api/restricted_current.ignore
+++ /dev/null
@@ -1,9 +0,0 @@
-// Baseline format: 1.0
-ParameterNameChange: androidx.room.BuiltInTypeConverters.State#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.BuiltInTypeConverters.State.valueOf
-ParameterNameChange: androidx.room.FtsOptions.MatchInfo#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.FtsOptions.MatchInfo.valueOf
-ParameterNameChange: androidx.room.FtsOptions.Order#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.FtsOptions.Order.valueOf
-ParameterNameChange: androidx.room.Index.Order#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.Index.Order.valueOf
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotationBox.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotationBox.kt
index d997e57..8f9928a 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotationBox.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotationBox.kt
@@ -71,7 +71,6 @@
         )
     }
 
-    @Suppress("SyntheticAccessor")
     private fun <R : Any> getFieldValue(
         methodName: String,
         returnType: Class<R>
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/util/MemoizedSequence.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/util/MemoizedSequence.kt
index 2f52f42..856381f 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/util/MemoizedSequence.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/util/MemoizedSequence.kt
@@ -22,7 +22,6 @@
  *
  * Note that collecting on these sequence is not thread safe.
  */
-@Suppress("SyntheticAccessor")
 internal class MemoizedSequence<T>(
     private val buildSequence: () -> Sequence<T>
 ) : Sequence<T> {
diff --git a/room/room-ktx/api/current.ignore b/room/room-ktx/api/current.ignore
deleted file mode 100644
index 26a7fe6..0000000
--- a/room/room-ktx/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.room.CoroutinesRoomKt:
-    Removed class androidx.room.CoroutinesRoomKt
diff --git a/room/room-ktx/api/restricted_current.ignore b/room/room-ktx/api/restricted_current.ignore
deleted file mode 100644
index 26a7fe6..0000000
--- a/room/room-ktx/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.room.CoroutinesRoomKt:
-    Removed class androidx.room.CoroutinesRoomKt
diff --git a/room/room-ktx/lint-baseline.xml b/room/room-ktx/lint-baseline.xml
new file mode 100644
index 0000000..ff52e62
--- /dev/null
+++ b/room/room-ktx/lint-baseline.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+</issues>
diff --git a/room/room-migration/api/restricted_current.ignore b/room/room-migration/api/restricted_current.ignore
deleted file mode 100644
index 1e1b7dd..0000000
--- a/room/room-migration/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-InvalidNullConversion: androidx.room.migration.bundle.SchemaEquality#isSchemaEqual(T) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter other in androidx.room.migration.bundle.SchemaEquality.isSchemaEqual(T other)
diff --git a/room/room-runtime/api/current.ignore b/room/room-runtime/api/current.ignore
deleted file mode 100644
index e24ca19..0000000
--- a/room/room-runtime/api/current.ignore
+++ /dev/null
@@ -1,11 +0,0 @@
-// Baseline format: 1.0
-ParameterNameChange: androidx.room.RoomDatabase.JournalMode#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.RoomDatabase.JournalMode.valueOf
-
-
-RemovedClass: androidx.room.EntityUpsertionAdapterKt:
-    Removed class androidx.room.EntityUpsertionAdapterKt
-
-
-RemovedPackage: androidx.room.util:
-    Removed package androidx.room.util
diff --git a/room/room-runtime/api/restricted_current.ignore b/room/room-runtime/api/restricted_current.ignore
deleted file mode 100644
index 9a2cd17..0000000
--- a/room/room-runtime/api/restricted_current.ignore
+++ /dev/null
@@ -1,39 +0,0 @@
-// Baseline format: 1.0
-InvalidNullConversion: androidx.room.EntityDeletionOrUpdateAdapter#bind(androidx.sqlite.db.SupportSQLiteStatement, T) parameter #1:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter entity in androidx.room.EntityDeletionOrUpdateAdapter.bind(androidx.sqlite.db.SupportSQLiteStatement statement, T entity)
-InvalidNullConversion: androidx.room.EntityDeletionOrUpdateAdapter#handle(T) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter entity in androidx.room.EntityDeletionOrUpdateAdapter.handle(T entity)
-InvalidNullConversion: androidx.room.EntityInsertionAdapter#bind(androidx.sqlite.db.SupportSQLiteStatement, T) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter statement in androidx.room.EntityInsertionAdapter.bind(androidx.sqlite.db.SupportSQLiteStatement statement, T entity)
-InvalidNullConversion: androidx.room.EntityInsertionAdapter#bind(androidx.sqlite.db.SupportSQLiteStatement, T) parameter #1:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter entity in androidx.room.EntityInsertionAdapter.bind(androidx.sqlite.db.SupportSQLiteStatement statement, T entity)
-InvalidNullConversion: androidx.room.EntityInsertionAdapter#insert(T) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter entity in androidx.room.EntityInsertionAdapter.insert(T entity)
-InvalidNullConversion: androidx.room.EntityInsertionAdapter#insertAndReturnId(T) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter entity in androidx.room.EntityInsertionAdapter.insertAndReturnId(T entity)
-InvalidNullConversion: androidx.room.EntityUpsertionAdapter#upsert(T) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter entity in androidx.room.EntityUpsertionAdapter.upsert(T entity)
-InvalidNullConversion: androidx.room.EntityUpsertionAdapter#upsertAndReturnId(T) parameter #0:
-    Attempted to change parameter from @Nullable to @NonNull: incompatible change for parameter entity in androidx.room.EntityUpsertionAdapter.upsertAndReturnId(T entity)
-
-
-ParameterNameChange: androidx.room.RoomDatabase.JournalMode#valueOf(String) parameter #0:
-    Attempted to change parameter name from name to value in method androidx.room.RoomDatabase.JournalMode.valueOf
-ParameterNameChange: androidx.room.RoomOpenHelper.Delegate#createAllTables(androidx.sqlite.db.SupportSQLiteDatabase) parameter #0:
-    Attempted to change parameter name from database to db in method androidx.room.RoomOpenHelper.Delegate.createAllTables
-ParameterNameChange: androidx.room.RoomOpenHelper.Delegate#dropAllTables(androidx.sqlite.db.SupportSQLiteDatabase) parameter #0:
-    Attempted to change parameter name from database to db in method androidx.room.RoomOpenHelper.Delegate.dropAllTables
-ParameterNameChange: androidx.room.RoomOpenHelper.Delegate#onCreate(androidx.sqlite.db.SupportSQLiteDatabase) parameter #0:
-    Attempted to change parameter name from database to db in method androidx.room.RoomOpenHelper.Delegate.onCreate
-ParameterNameChange: androidx.room.RoomOpenHelper.Delegate#onOpen(androidx.sqlite.db.SupportSQLiteDatabase) parameter #0:
-    Attempted to change parameter name from database to db in method androidx.room.RoomOpenHelper.Delegate.onOpen
-ParameterNameChange: androidx.room.RoomOpenHelper.Delegate#onPostMigrate(androidx.sqlite.db.SupportSQLiteDatabase) parameter #0:
-    Attempted to change parameter name from database to db in method androidx.room.RoomOpenHelper.Delegate.onPostMigrate
-ParameterNameChange: androidx.room.RoomOpenHelper.Delegate#onPreMigrate(androidx.sqlite.db.SupportSQLiteDatabase) parameter #0:
-    Attempted to change parameter name from database to db in method androidx.room.RoomOpenHelper.Delegate.onPreMigrate
-
-
-RemovedClass: androidx.room.EntityUpsertionAdapterKt:
-    Removed class androidx.room.EntityUpsertionAdapterKt
-RemovedClass: androidx.room.util.TableInfoKt:
-    Removed class androidx.room.util.TableInfoKt
diff --git a/room/room-runtime/lint-baseline.xml b/room/room-runtime/lint-baseline.xml
index 3774d1b..1998151 100644
--- a/room/room-runtime/lint-baseline.xml
+++ b/room/room-runtime/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="NewApi"
@@ -163,4 +163,193 @@
             file="src/test/java/androidx/room/TransactionExecutorTest.kt"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="Api29Impl.setNotificationUris can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            SupportSQLiteCompat.Api29Impl.setNotificationUris(delegate, cr, uris)"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api29Impl.setNotificationUris can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            SupportSQLiteCompat.Api29Impl.setNotificationUris(delegate, cr, uris)"
+        errorLine2="                                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api29Impl.setNotificationUris can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            SupportSQLiteCompat.Api29Impl.setNotificationUris(delegate, cr, uris)"
+        errorLine2="                                                                        ~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api29Impl.setNotificationUris can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            SupportSQLiteCompat.Api29Impl.setNotificationUris(delegate, cr, uris)"
+        errorLine2="                                                                            ~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api19Impl.getNotificationUri can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            return SupportSQLiteCompat.Api19Impl.getNotificationUri(delegate)"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api19Impl.getNotificationUri can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            return SupportSQLiteCompat.Api19Impl.getNotificationUri(delegate)"
+        errorLine2="                                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api29Impl.getNotificationUris can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            return SupportSQLiteCompat.Api29Impl.getNotificationUris(delegate)"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api29Impl.getNotificationUris can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            return SupportSQLiteCompat.Api29Impl.getNotificationUris(delegate)"
+        errorLine2="                                                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api23Impl.setExtras can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            SupportSQLiteCompat.Api23Impl.setExtras(delegate, extras)"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api23Impl.setExtras can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            SupportSQLiteCompat.Api23Impl.setExtras(delegate, extras)"
+        errorLine2="                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api23Impl.setExtras can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            SupportSQLiteCompat.Api23Impl.setExtras(delegate, extras)"
+        errorLine2="                                                              ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.createCancellationSignal can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="        SupportSQLiteCompat.Api16Impl.createCancellationSignal()"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/util/DBUtil.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SafeIterableMap can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.room`)"
+        errorLine1="    internal val observerMap = SafeIterableMap&lt;Observer, ObserverWrapper>()"
+        errorLine2="                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/InvalidationTracker.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api19Impl.isLowRamDevice can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                SupportSQLiteCompat.Api19Impl.isLowRamDevice(activityManager)"
+        errorLine2="                                              ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/RoomDatabase.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api19Impl.isLowRamDevice can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                SupportSQLiteCompat.Api19Impl.isLowRamDevice(activityManager)"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/RoomDatabase.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArchTaskExecutor.getIOThreadExecutor can only be called from within the same library group prefix (referenced groupId=`androidx.arch.core` with prefix androidx.arch from groupId=`androidx.room`)"
+        errorLine1="                transactionExecutor = ArchTaskExecutor.getIOThreadExecutor()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/RoomDatabase.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProcessLock can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="        val copyLock = ProcessLock("
+        errorLine2="                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/SQLiteCopyOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProcessLock can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            name,"
+        errorLine2="            ~~~~">
+        <location
+            file="src/main/java/androidx/room/SQLiteCopyOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProcessLock can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            context.filesDir,"
+        errorLine2="            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/SQLiteCopyOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProcessLock.lock can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            copyLock.lock()"
+        errorLine2="                     ~~~~">
+        <location
+            file="src/main/java/androidx/room/SQLiteCopyOpenHelper.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProcessLock.unlock can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="            copyLock.unlock()"
+        errorLine2="                     ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/SQLiteCopyOpenHelper.kt"/>
+    </issue>
+
 </issues>
diff --git a/room/room-runtime/src/main/java/androidx/room/util/FtsTableInfo.kt b/room/room-runtime/src/main/java/androidx/room/util/FtsTableInfo.kt
index 5590d3b..b533798 100644
--- a/room/room-runtime/src/main/java/androidx/room/util/FtsTableInfo.kt
+++ b/room/room-runtime/src/main/java/androidx/room/util/FtsTableInfo.kt
@@ -15,7 +15,6 @@
  */
 package androidx.room.util
 
-import android.annotation.SuppressLint
 import androidx.annotation.RestrictTo
 import androidx.annotation.VisibleForTesting
 import androidx.sqlite.db.SupportSQLiteDatabase
@@ -83,7 +82,6 @@
          * @param tableName The table name.
          * @return A FtsTableInfo containing the columns and options for the provided table name.
          */
-        @SuppressLint("SyntheticAccessor")
         @JvmStatic
         fun read(database: SupportSQLiteDatabase, tableName: String): FtsTableInfo {
             val columns = readColumns(database, tableName)
diff --git a/room/room-runtime/src/main/java/androidx/room/util/TableInfo.kt b/room/room-runtime/src/main/java/androidx/room/util/TableInfo.kt
index 2b6ed45..7cded96 100644
--- a/room/room-runtime/src/main/java/androidx/room/util/TableInfo.kt
+++ b/room/room-runtime/src/main/java/androidx/room/util/TableInfo.kt
@@ -15,7 +15,6 @@
  */
 package androidx.room.util
 
-import android.annotation.SuppressLint
 import android.database.Cursor
 import android.os.Build
 import androidx.annotation.IntDef
@@ -226,7 +225,6 @@
              * compare the two values by ignoring the surrounding parenthesis.
              *
              */
-            @SuppressLint("SyntheticAccessor")
             @VisibleForTesting
             @JvmStatic
             fun defaultValueEquals(current: String, other: String?): Boolean {
diff --git a/room/room-testing/api/current.ignore b/room/room-testing/api/current.ignore
deleted file mode 100644
index abbadbf..0000000
--- a/room/room-testing/api/current.ignore
+++ /dev/null
@@ -1,9 +0,0 @@
-// Baseline format: 1.0
-ChangedThrows: androidx.room.testing.MigrationTestHelper#runMigrationsAndValidate(String, int, boolean, androidx.room.migration.Migration...):
-    Method androidx.room.testing.MigrationTestHelper.runMigrationsAndValidate no longer throws exception java.io.IOException
-
-
-RemovedMethod: androidx.room.testing.MigrationTestHelper#MigrationTestHelper(android.app.Instrumentation, Class<? extends androidx.room.RoomDatabase>, java.util.List<androidx.room.migration.AutoMigrationSpec>):
-    Removed constructor androidx.room.testing.MigrationTestHelper(android.app.Instrumentation,Class<? extends androidx.room.RoomDatabase>,java.util.List<androidx.room.migration.AutoMigrationSpec>)
-RemovedMethod: androidx.room.testing.MigrationTestHelper#MigrationTestHelper(android.app.Instrumentation, Class<? extends androidx.room.RoomDatabase>, java.util.List<androidx.room.migration.AutoMigrationSpec>, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory):
-    Removed constructor androidx.room.testing.MigrationTestHelper(android.app.Instrumentation,Class<? extends androidx.room.RoomDatabase>,java.util.List<androidx.room.migration.AutoMigrationSpec>,androidx.sqlite.db.SupportSQLiteOpenHelper.Factory)
diff --git a/room/room-testing/api/restricted_current.ignore b/room/room-testing/api/restricted_current.ignore
deleted file mode 100644
index abbadbf..0000000
--- a/room/room-testing/api/restricted_current.ignore
+++ /dev/null
@@ -1,9 +0,0 @@
-// Baseline format: 1.0
-ChangedThrows: androidx.room.testing.MigrationTestHelper#runMigrationsAndValidate(String, int, boolean, androidx.room.migration.Migration...):
-    Method androidx.room.testing.MigrationTestHelper.runMigrationsAndValidate no longer throws exception java.io.IOException
-
-
-RemovedMethod: androidx.room.testing.MigrationTestHelper#MigrationTestHelper(android.app.Instrumentation, Class<? extends androidx.room.RoomDatabase>, java.util.List<androidx.room.migration.AutoMigrationSpec>):
-    Removed constructor androidx.room.testing.MigrationTestHelper(android.app.Instrumentation,Class<? extends androidx.room.RoomDatabase>,java.util.List<androidx.room.migration.AutoMigrationSpec>)
-RemovedMethod: androidx.room.testing.MigrationTestHelper#MigrationTestHelper(android.app.Instrumentation, Class<? extends androidx.room.RoomDatabase>, java.util.List<androidx.room.migration.AutoMigrationSpec>, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory):
-    Removed constructor androidx.room.testing.MigrationTestHelper(android.app.Instrumentation,Class<? extends androidx.room.RoomDatabase>,java.util.List<androidx.room.migration.AutoMigrationSpec>,androidx.sqlite.db.SupportSQLiteOpenHelper.Factory)
diff --git a/room/settings.gradle b/room/settings.gradle
index a3602ac..05ee96d 100644
--- a/room/settings.gradle
+++ b/room/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/samples/AndroidXDemos/lint-baseline.xml b/samples/AndroidXDemos/lint-baseline.xml
index 7b8bf98..328b146 100644
--- a/samples/AndroidXDemos/lint-baseline.xml
+++ b/samples/AndroidXDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="OnClick"
@@ -356,6 +356,60 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        checkArgument(selectionTracker != null);"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/widget/selection/simple/DemoAdapter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        checkArgument(selectionTracker != null);"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/widget/selection/single/DemoAdapter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        checkArgument(tracker != null);"
+        errorLine2="        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/widget/selection/fancy/DemoAdapter.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SelectionObserver.onSelectionCleared can only be called from within the same library (androidx.recyclerview:recyclerview-selection)"
+        errorLine1="                    public void onSelectionCleared() {"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/widget/selection/fancy/FancySelectionDemoActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        Preconditions.checkArgument(group != null);"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/widget/selection/fancy/Uris.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkArgument can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        Preconditions.checkArgument(isCheese(uri));"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/widget/selection/fancy/Uris.java"/>
+    </issue>
+
+    <issue
         id="ObsoleteSdkInt"
         message="This folder configuration (`v11`) is unnecessary; `minSdkVersion` is 14. Merge all the resources in this folder into `layout`.">
         <location
diff --git a/samples/MediaRoutingDemo/lint-baseline.xml b/samples/MediaRoutingDemo/lint-baseline.xml
index af8264e2..a0e832a 100644
--- a/samples/MediaRoutingDemo/lint-baseline.xml
+++ b/samples/MediaRoutingDemo/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
@@ -19,4 +19,130 @@
             file="src/androidTest/java/androidx/viewpager2/widget/swipe/ManualSwipeInjector.java"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="RouteInfo.isDefaultOrBluetooth can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="            if (!routeInfo.isDefaultOrBluetooth()) {"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/activities/systemrouting/source/AndroidXMediaRouterSystemRoutesSource.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RouteInfo.DEVICE_TYPE_BLUETOOTH can only be accessed from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="        BLUETOOTH(MediaRouter.RouteInfo.DEVICE_TYPE_BLUETOOTH),"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/data/RouteItem.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="RouteInfo.DEVICE_TYPE_UNKNOWN can only be accessed from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="        UNKNOWN(MediaRouter.RouteInfo.DEVICE_TYPE_UNKNOWN);"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/data/RouteItem.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteProvider.onCreateRouteController can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="    public RouteController onCreateRouteController(@NonNull String routeId,"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteDescriptor.getGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="        if (initialRoute.getGroupMemberIds().isEmpty()) {"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteDescriptor.getGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="            memberIds.addAll(initialRoute.getGroupMemberIds());"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="                            .addGroupMemberIds(memberIds);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteDescriptor.getGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="            for (String memberRouteId : routeDescriptor.getGroupMemberIds()) {"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.clearGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="                            .clearGroupMemberIds();"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addGroupMemberId can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="                groupDescriptorBuilder.addGroupMemberId(memberRouteId);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteDescriptor.getGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="                if (!routeDescriptor.getGroupMemberIds().isEmpty()"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteDescriptor.getGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="                        &amp;&amp; mMemberRouteIds.containsAll(routeDescriptor.getGroupMemberIds())) {"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteDescriptor.getGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="            if (routeDescriptor.getGroupMemberIds().isEmpty()) {"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaRouteDescriptor.getGroupMemberIds can only be called from within the same library (androidx.mediarouter:mediarouter)"
+        errorLine1="            for (String routeId : routeDescriptor.getGroupMemberIds()) {"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/mediarouting/providers/SampleDynamicGroupMediaRouteProvider.java"/>
+    </issue>
+
 </issues>
diff --git a/samples/SupportEmojiDemos/lint-baseline.xml b/samples/SupportEmojiDemos/lint-baseline.xml
index e9a7bbf..747d878 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.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="cli" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanSynchronizedMethods"
@@ -29,6 +29,15 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="EmojiCompat.reset can only be called from within the same library (androidx.emoji2:emoji2)"
+        errorLine1="        EmojiCompat.reset(config);"
+        errorLine2="                    ~~~~~">
+        <location
+            file="src/main/java/com/example/android/support/text/emoji/Config.java"/>
+    </issue>
+
+    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    public ConfigLayout(Context context) {"
diff --git a/samples/SupportLeanbackDemos/lint-baseline.xml b/samples/SupportLeanbackDemos/lint-baseline.xml
index 6681417..bee5f2e 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 8.0.0-beta03" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-beta03)" variant="all" version="8.0.0-beta03">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="MissingSuperCall"
@@ -596,6 +596,150 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="GuidedStepFragment.SLIDE_FROM_BOTTOM can only be accessed from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="            setEntranceTransitionType(GuidedStepFragment.SLIDE_FROM_BOTTOM);"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GuidedStepFragment.setEntranceTransitionType can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="            setEntranceTransitionType(GuidedStepFragment.SLIDE_FROM_BOTTOM);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GuidedStepSupportFragment.SLIDE_FROM_BOTTOM can only be accessed from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="            setEntranceTransitionType(GuidedStepSupportFragment.SLIDE_FROM_BOTTOM);"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="GuidedStepSupportFragment.setEntranceTransitionType can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="            setEntranceTransitionType(GuidedStepSupportFragment.SLIDE_FROM_BOTTOM);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        MediaPlayerGlue mediaPlayerGlue = new MediaPlayerGlue(getActivity());"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.REPEAT_ONE can only be accessed from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setMode(MediaPlayerGlue.REPEAT_ONE);"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setMode can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setMode(MediaPlayerGlue.REPEAT_ONE);"
+        errorLine2="                        ~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setArtist can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setArtist(&quot;A Googler&quot;);"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setTitle can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setTitle(&quot;Diving with Sharks Trailer&quot;);"
+        errorLine2="                        ~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setMediaSource can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setMediaSource(Uri.parse(&quot;android.resource://com.example.android.leanback/&quot;"
+        errorLine2="                        ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        MediaPlayerGlue mediaPlayerGlue = new MediaPlayerGlue(getActivity());"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.REPEAT_ONE can only be accessed from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setMode(MediaPlayerGlue.REPEAT_ONE);"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setMode can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setMode(MediaPlayerGlue.REPEAT_ONE);"
+        errorLine2="                        ~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setArtist can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setArtist(&quot;A Googler&quot;);"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setTitle can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setTitle(&quot;Diving with Sharks Trailer&quot;);"
+        errorLine2="                        ~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MediaPlayerGlue.setMediaSource can only be called from within the same library group prefix (referenced groupId=`androidx.leanback` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        mediaPlayerGlue.setMediaSource(Uri.parse(&quot;android.resource://com.example.android.leanback/&quot;"
+        errorLine2="                        ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+    </issue>
+
+    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="        public Bitmap getCache(Object token) {"
diff --git a/security/security-crypto/gradle/wrapper/gradle-wrapper.jar b/security/security-crypto/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index f6b961f..0000000
--- a/security/security-crypto/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/security/security-crypto/gradle/wrapper/gradle-wrapper.properties b/security/security-crypto/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index cd7db12..0000000
--- a/security/security-crypto/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Tue Feb 19 15:29:35 UTC 2019
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
diff --git a/security/security-crypto/gradlew b/security/security-crypto/gradlew
deleted file mode 100644
index cccdd3d..0000000
--- a/security/security-crypto/gradlew
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env sh
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
-    echo "$*"
-}
-
-die () {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Escape application args
-save () {
-    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
-    echo " "
-}
-APP_ARGS=$(save "$@")
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
-  cd "$(dirname "$0")"
-fi
-
-exec "$JAVACMD" "$@"
diff --git a/security/security-crypto/gradlew.bat b/security/security-crypto/gradlew.bat
deleted file mode 100644
index f9553162..0000000
--- a/security/security-crypto/gradlew.bat
+++ /dev/null
@@ -1,84 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
index 1aae7ac..f9d8b6e 100644
--- a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
+++ b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
@@ -13,12 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@file:SuppressLint("SyntheticAccessor")
 
 package androidx.slidingpanelayout.widget
 
 import android.R
-import android.annotation.SuppressLint
 import android.content.Context
 import android.graphics.Canvas
 import android.graphics.PixelFormat
diff --git a/sqlite/sqlite-framework/src/main/java/androidx/sqlite/util/ProcessLock.kt b/sqlite/sqlite-framework/src/main/java/androidx/sqlite/util/ProcessLock.kt
index 1d176e5..eb2b4e7 100644
--- a/sqlite/sqlite-framework/src/main/java/androidx/sqlite/util/ProcessLock.kt
+++ b/sqlite/sqlite-framework/src/main/java/androidx/sqlite/util/ProcessLock.kt
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 package androidx.sqlite.util
-import android.annotation.SuppressLint
 import android.util.Log
 import androidx.annotation.RestrictTo
 import java.io.File
@@ -56,7 +55,6 @@
     private val processLock: Boolean
 ) {
     private val lockFile: File? = lockDir?.let { File(it, "$name.lck") }
-    @SuppressLint("SyntheticAccessor")
     private val threadLock: Lock = getThreadLock(name)
     private var lockChannel: FileChannel? = null
 
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
index 2a7b936..292dd3e 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/EntryExitMatchingHookRegistry.java
@@ -16,8 +16,6 @@
 
 package androidx.sqlite.inspection;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.inspection.ArtTooling.EntryHook;
@@ -58,7 +56,6 @@
             final OnExitCallback onExitCallback) {
         mEnvironment.artTooling().registerEntryHook(originClass, originMethod,
                 new EntryHook() {
-                    @SuppressLint("SyntheticAccessor")
                     @Override
                     public void onEntry(@Nullable Object thisObject,
                             @NonNull List<Object> args) {
@@ -68,7 +65,6 @@
 
         mEnvironment.artTooling().registerExitHook(originClass, originMethod,
                 new ExitHook<Object>() {
-                    @SuppressLint("SyntheticAccessor")
                     @Override
                     public Object onExit(Object result) {
                         Frame entryFrame = getFrameStack().pollLast();
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RequestCollapsingThrottler.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RequestCollapsingThrottler.java
index 71bb4b3..7cdff67 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RequestCollapsingThrottler.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/RequestCollapsingThrottler.java
@@ -16,8 +16,6 @@
 
 package androidx.sqlite.inspection;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.GuardedBy;
 
 /**
@@ -27,7 +25,6 @@
  *
  * Thread safe.
  */
-@SuppressLint("SyntheticAccessor")
 final class RequestCollapsingThrottler {
     private static final long NEVER = -1;
 
diff --git a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
index b1776de..9bbe9366 100644
--- a/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
+++ b/sqlite/sqlite-inspection/src/main/java/androidx/sqlite/inspection/SqliteInspector.java
@@ -99,7 +99,6 @@
  * Inspector to work with SQLite databases
  */
 @SuppressWarnings({"TryFinallyCanBeTryWithResources", "SameParameterValue"})
-@SuppressLint("SyntheticAccessor")
 final class SqliteInspector extends Inspector {
     private static final String OPEN_DATABASE_COMMAND_SIGNATURE_API_11 = "openDatabase"
             + "("
@@ -398,7 +397,6 @@
 
         ExitHook<SQLiteDatabase> hook =
                 new ExitHook<SQLiteDatabase>() {
-                    @SuppressLint("SyntheticAccessor")
                     @Override
                     public SQLiteDatabase onExit(SQLiteDatabase database) {
                         try {
diff --git a/sqlite/sqlite/src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.kt b/sqlite/sqlite/src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.kt
index a19ce02..eee04ba 100644
--- a/sqlite/sqlite/src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.kt
+++ b/sqlite/sqlite/src/main/java/androidx/sqlite/db/SimpleSQLiteQuery.kt
@@ -15,8 +15,6 @@
  */
 package androidx.sqlite.db
 
-import android.annotation.SuppressLint
-
 /**
  * A basic implementation of [SupportSQLiteQuery] which receives a query and its args and
  * binds args based on the passed in Object type.
@@ -61,7 +59,6 @@
          * @param [statement] The sqlite statement
          * @param [bindArgs]  The list of bind arguments
          */
-        @SuppressLint("SyntheticAccessor")
         @JvmStatic
         fun bind(
             statement: SupportSQLiteProgram,
diff --git a/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt b/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt
index 511d9e5f..0927a8e 100644
--- a/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt
+++ b/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/ScreenshotTestRule.kt
@@ -16,7 +16,6 @@
 
 package androidx.test.screenshot
 
-import android.annotation.SuppressLint
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
 import android.os.Build
@@ -76,7 +75,6 @@
  *
  * @see Bitmap.assertAgainstGolden
  */
-@SuppressLint("SyntheticAccessor")
 open class ScreenshotTestRule(
     config: ScreenshotTestRuleConfig = ScreenshotTestRuleConfig()
 ) : TestRule {
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
index 667c805..d114a60 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
@@ -844,6 +844,8 @@
 
     /**
      * Freezes the rotation of the display with {@code displayId} at its current state.
+     * <p>Note: Only works on Android API level 30 (R) or above, where multi-display is
+     * officially supported.
      * @throws RemoteException never
      * @see Display#getDisplayId()
      */
@@ -885,6 +887,8 @@
      * performing another operation.
      * <p>Note: Some secondary displays don't have rotation sensors and therefore won't respond
      * to this method.
+     * <p>Note: Only works on Android API level 30 (R) or above, where multi-display is
+     * officially supported.
      * @throws RemoteException never
      * @see Display#getDisplayId()
      */
@@ -923,6 +927,8 @@
      * <p>Note: This rotation is relative to the natural orientation which depends on the device
      * type (e.g. phone vs. tablet). Consider using {@link #setOrientationPortrait()} and
      * {@link #setOrientationLandscape()}.
+     * <p>Note: Only works on Android API level 30 (R) or above, where multi-display is
+     * officially supported.
      * @throws RemoteException never
      * @see Display#getDisplayId()
      */
@@ -951,6 +957,8 @@
      * <p>Note: This rotation is relative to the natural orientation which depends on the device
      * type (e.g. phone vs. tablet). Consider using {@link #setOrientationPortrait()} and
      * {@link #setOrientationLandscape()}.
+     * <p>Note: Only works on Android API level 30 (R) or above, where multi-display is
+     * officially supported.
      * @throws RemoteException never
      * @see Display#getDisplayId()
      */
@@ -977,6 +985,8 @@
      * . Use {@link #unfreezeRotation()} to un-freeze the rotation.
      * <p>Note: The natural orientation depends on the device type (e.g. phone vs. tablet).
      * Consider using {@link #setOrientationPortrait()} and {@link #setOrientationLandscape()}.
+     * <p>Note: Only works on Android API level 30 (R) or above, where multi-display is
+     * officially supported.
      * @throws RemoteException never
      * @see Display#getDisplayId()
      */
@@ -1005,6 +1015,8 @@
     /**
      * Orients the display with {@code displayId} to its portrait orientation (height >= width) and
      * freezes rotation. Use {@link #unfreezeRotation()} to un-freeze the rotation.
+     * <p>Note: Only works on Android API level 30 (R) or above, where multi-display is
+     * officially supported.
      * @throws RemoteException never
      * @see Display#getDisplayId()
      */
@@ -1039,6 +1051,8 @@
     /**
      * Orients the display with {@code displayId} to its landscape orientation (width >= height) and
      * freezes rotation. Use {@link #unfreezeRotation()} to un-freeze the rotation.
+     * <p>Note: Only works on Android API level 30 (R) or above, where multi-display is
+     * officially supported.
      * @throws RemoteException never
      * @see Display#getDisplayId()
      */
diff --git a/testutils/testutils-espresso/lint-baseline.xml b/testutils/testutils-espresso/lint-baseline.xml
index e4b1fbb..806832a 100644
--- a/testutils/testutils-espresso/lint-baseline.xml
+++ b/testutils/testutils-espresso/lint-baseline.xml
@@ -1,5 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="UiThreadStatement.runOnUiThread can only be called from within the same library (androidx.test:runner)"
+        errorLine1="    if (requestLayout) UiThreadStatement.runOnUiThread { requestLayout() }"
+        errorLine2="                                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/testutils/SwipeExclusionRects.kt"/>
+    </issue>
 
     <issue
         id="UnknownNullness"
diff --git a/testutils/testutils-macrobenchmark/lint-baseline.xml b/testutils/testutils-macrobenchmark/lint-baseline.xml
new file mode 100644
index 0000000..814f280
--- /dev/null
+++ b/testutils/testutils-macrobenchmark/lint-baseline.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="CompilationModeKt.isSupportedWithVmSettings can only be called from within the same library group prefix (referenced groupId=`androidx.benchmark` with prefix androidx from groupId=`androidx`)"
+        errorLine1="            if (compilationMode.isSupportedWithVmSettings()) {"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/testutils/MacrobenchUtils.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="CompilationModeKt.isSupportedWithVmSettings can only be called from within the same library group prefix (referenced groupId=`androidx.benchmark` with prefix androidx from groupId=`androidx`)"
+        errorLine1="        if (compilationMode.isSupportedWithVmSettings()) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/testutils/MacrobenchUtils.kt"/>
+    </issue>
+
+</issues>
diff --git a/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt b/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt
index 02a1cd5..288c788 100644
--- a/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt
+++ b/testutils/testutils-runtime/src/main/java/androidx/testutils/AnimationActivityTestRule.kt
@@ -95,7 +95,6 @@
             testType = TestType.ANIMATION
             val wrappedStatement = super.apply(base, description)
             return object : Statement() {
-                @SuppressLint("SyntheticAccessor")
                 override fun evaluate() {
                     val savedScale = durationGetter.invoke(null) as Float
                     try {
diff --git a/text/text/lint-baseline.xml b/text/text/lint-baseline.xml
index 823d7dd..7bcb892 100644
--- a/text/text/lint-baseline.xml
+++ b/text/text/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanInlineOptIn"
@@ -28,202 +28,4 @@
             file="src/main/java/androidx/compose/ui/text/android/TempListUtils.kt"/>
     </issue>
 
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal open class BaselineShiftSpan(val multiplier: Float) : MetricAffectingSpan() {"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class FontFeatureSpan(val fontFeatureSettings: String) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class IndentationFixSpan : LeadingMarginSpan {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal object LayoutCompat {"
-        errorLine2="                ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal fun Layout.getLineForOffset(@IntRange(from = 0) offset: Int, upstream: Boolean): Int {"
-        errorLine2="                    ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LayoutHelper(val layout: Layout) {"
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LayoutIntrinsics("
-        errorLine2="               ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LetterSpacingSpanEm(val letterSpacing: Float) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LetterSpacingSpanPx(@Px val letterSpacing: Float) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LineHeightSpan("
-        errorLine2="               ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class LineHeightStyleSpan("
-        errorLine2="               ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class PlaceholderSpan("
-        errorLine2="               ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal data class Segment("
-        errorLine2="                    ~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal object SegmentBreaker {"
-        errorLine2="                ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="enum class SegmentType {"
-        errorLine2="           ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class ShadowSpan("
-        errorLine2="               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal open class SkewXSpan(val skewX: Float) : MetricAffectingSpan() {"
-        errorLine2="                    ~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="object StaticLayoutFactory {"
-        errorLine2="       ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class TextDecorationSpan("
-        errorLine2="               ~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class TextLayout constructor("
-        errorLine2="               ~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/TextLayout.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class TypefaceSpan(val typeface: Typeface) : MetricAffectingSpan() {"
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt"/>
-    </issue>
-
-    <issue
-        id="BanSuppressTag"
-        message="@suppress is not allowed in documentation"
-        errorLine1="internal class WordBoundary("
-        errorLine2="               ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt"/>
-    </issue>
-
 </issues>
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
index cc2fca4..85aef6d 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
@@ -79,10 +79,10 @@
         val end = 5
         val staticLayout = StaticLayoutFactory.create(
             text = text,
-            start = start,
-            end = end,
             paint = TextPaint(),
-            width = Int.MAX_VALUE
+            width = Int.MAX_VALUE,
+            start = start,
+            end = end
         )
 
         // width Int.MAX_VALUE therefore should be only one line
@@ -206,9 +206,9 @@
             text = text,
             paint = paint,
             width = width,
+            maxLines = 1,
             ellipsize = TextUtils.TruncateAt.END,
-            ellipsizedWidth = ellipsizedWidth,
-            maxLines = 1
+            ellipsizedWidth = ellipsizedWidth
         )
 
         assertThat(staticLayout.getEllipsisCount(0)).isGreaterThan(0)
@@ -506,9 +506,9 @@
     fun create_withStartNegative_throwsIAE() {
         StaticLayoutFactory.create(
             text = "abc",
-            start = -1,
             paint = TextPaint(),
-            width = Int.MAX_VALUE
+            width = Int.MAX_VALUE,
+            start = -1
         )
     }
 
@@ -516,9 +516,9 @@
     fun create_withStartGreaterThanLength_throwsIAE() {
         StaticLayoutFactory.create(
             text = "abc",
-            start = "abc".length + 1,
             paint = TextPaint(),
-            width = Int.MAX_VALUE
+            width = Int.MAX_VALUE,
+            start = "abc".length + 1
         )
     }
 
@@ -526,9 +526,9 @@
     fun create_withEndNegative_throwsIAE() {
         StaticLayoutFactory.create(
             text = "abc",
-            end = -1,
             paint = TextPaint(),
-            width = Int.MAX_VALUE
+            width = Int.MAX_VALUE,
+            end = -1
         )
     }
 
@@ -536,9 +536,9 @@
     fun create_withEndGreaterThanLength_throwsIAE() {
         StaticLayoutFactory.create(
             text = "abc",
-            end = "abc".length + 1,
             paint = TextPaint(),
-            width = Int.MAX_VALUE
+            width = Int.MAX_VALUE,
+            end = "abc".length + 1
         )
     }
 
@@ -546,10 +546,10 @@
     fun create_withStartGreaterThanEnd_throwsIAE() {
         StaticLayoutFactory.create(
             text = "abc",
-            start = 2,
-            end = 1,
             paint = TextPaint(),
-            width = Int.MAX_VALUE
+            width = Int.MAX_VALUE,
+            start = 2,
+            end = 1
         )
     }
 
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
index af1f1e6..e1f0769 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
@@ -28,10 +28,7 @@
 /**
  * LayoutCompat class which provides all supported attributes by framework, and also defines
  * default value of those attributes for Compose.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal object LayoutCompat {
     const val ALIGN_NORMAL = 0
     const val ALIGN_OPPOSITE = 1
@@ -172,9 +169,7 @@
  * if the offset it not a line broken offset.
  * @return the line number
  *
- * @suppress
  */
-@InternalPlatformTextApi
 internal fun Layout.getLineForOffset(@IntRange(from = 0) offset: Int, upstream: Boolean): Int {
     if (offset <= 0) return 0
     if (offset >= text.length) return lineCount - 1
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
index 1a1e7c0..ee0c079 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
@@ -28,9 +28,7 @@
  *
  * This class is not thread-safe. Do not share an instance with multiple threads.
  *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class LayoutHelper(val layout: Layout) {
 
     private val paragraphEnds: List<Int>
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt
index 6fcea24..79afb25 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt
@@ -28,10 +28,7 @@
 
 /**
  * Computes and caches the text layout intrinsic values such as min/max width.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class LayoutIntrinsics(
     private val charSequence: CharSequence,
     private val textPaint: TextPaint,
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt b/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
index 2c7c8d0..088ae9a 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
@@ -38,10 +38,6 @@
 
 private const val TAG = "StaticLayoutFactory"
 
-/**
-* @suppress
-*/
-@OptIn(InternalPlatformTextApi::class)
 @InternalPlatformTextApi
 object StaticLayoutFactory {
 
@@ -56,10 +52,10 @@
      */
     fun create(
         text: CharSequence,
-        start: Int = 0,
-        end: Int = text.length,
         paint: TextPaint,
         width: Int,
+        start: Int = 0,
+        end: Int = text.length,
         textDir: TextDirectionHeuristic = LayoutCompat.DEFAULT_TEXT_DIRECTION_HEURISTIC,
         alignment: Alignment = LayoutCompat.DEFAULT_LAYOUT_ALIGNMENT,
         @IntRange(from = 0)
@@ -127,8 +123,7 @@
     }
 }
 
-@OptIn(InternalPlatformTextApi::class)
-private class StaticLayoutParams constructor(
+private class StaticLayoutParams(
     val text: CharSequence,
     val start: Int = 0,
     val end: Int,
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
index 1f88bd0..456ef29 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
@@ -108,10 +108,8 @@
  * @see StaticLayoutFactory
  * @see BoringLayoutFactory
  *
- * @suppress
  */
 @OptIn(InternalPlatformTextApi::class)
-@InternalPlatformTextApi
 internal class TextLayout constructor(
     charSequence: CharSequence,
     width: Float,
@@ -253,10 +251,10 @@
                 isBoringLayout = false
                 StaticLayoutFactory.create(
                     text = charSequence,
-                    start = 0,
-                    end = charSequence.length,
                     paint = textPaint,
                     width = widthInt,
+                    start = 0,
+                    end = charSequence.length,
                     textDir = frameworkTextDir,
                     alignment = frameworkAlignment,
                     maxLines = maxLines,
@@ -998,10 +996,10 @@
 
         val tmpLayout = StaticLayoutFactory.create(
             text = emptyText,
+            paint = textPaint,
+            width = Int.MAX_VALUE,
             start = 0,
             end = emptyText.length,
-            width = Int.MAX_VALUE,
-            paint = textPaint,
             textDir = frameworkTextDir,
             includePadding = includePadding,
             useFallbackLineSpacing = fallbackLineSpacing
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt b/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt
index 95fe44e..ffdb361 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt
@@ -18,7 +18,6 @@
 
 import android.text.Layout
 import androidx.compose.ui.text.android.CharSequenceCharacterIterator
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 import androidx.compose.ui.text.android.LayoutHelper
 import androidx.compose.ui.text.android.fastForEach
 import androidx.compose.ui.text.android.fastZipWithNext
@@ -40,9 +39,7 @@
  * @param right a graphical right position from the layout origin.
  * @param bottom a graphical bottom position from the layout origin.
  *
- * @suppress
  */
-@InternalPlatformTextApi
 internal data class Segment(
     val startOffset: Int,
     val endOffset: Int,
@@ -53,10 +50,8 @@
 )
 
 /**
- * Porvide a segmentation breaker for the text animation.
- * @suppress
+ * Provide a segmentation breaker for the text animation.
  */
-@InternalPlatformTextApi
 internal object SegmentBreaker {
     private fun breakInWords(layoutHelper: LayoutHelper): List<Int> {
         val text = layoutHelper.layout.text
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt b/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt
index afad1e9..e723c16 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt
@@ -16,15 +16,10 @@
 
 package androidx.compose.ui.text.android.animation
 
-import androidx.compose.ui.text.android.InternalPlatformTextApi
-
 /**
  * Defines a segmentation rule for text animation
- *
- * @suppress
  */
-@InternalPlatformTextApi
-enum class SegmentType {
+internal enum class SegmentType {
     /**
      * Don't break text and treat whole text as the segment.
      */
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt b/text/text/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt
index 4ebf2b4..ae6c352 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt
@@ -15,7 +15,6 @@
  */
 package androidx.compose.ui.text.android.selection
 
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 import java.text.BreakIterator
 import java.util.Locale
 
@@ -33,9 +32,7 @@
  * [Editor.java](https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/Editor.java)
  * @param locale Locale of the input text.
  * @param text The input text to be analyzed.
- * @suppress
  */
-@InternalPlatformTextApi
 internal class WordBoundary(
     locale: Locale,
     text: CharSequence
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt
index 676c6d8..2ca672a 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt
@@ -18,15 +18,11 @@
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 import kotlin.math.ceil
 
 /**
  * Span which shifts the vertical position of baseline.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal open class BaselineShiftSpan(val multiplier: Float) : MetricAffectingSpan() {
 
     override fun updateMeasureState(textPaint: TextPaint) {
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt
index 0b3cd18..fd20af3 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt
@@ -18,14 +18,10 @@
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span that change font feature settings for font.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class FontFeatureSpan(val fontFeatureSettings: String) : MetricAffectingSpan() {
     override fun updateMeasureState(textPaint: TextPaint) {
         textPaint.fontFeatureSettings = fontFeatureSettings
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt
index e8441ad..a6aa6b3 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/IndentationFixSpan.kt
@@ -21,7 +21,6 @@
 import android.text.Layout
 import android.text.Layout.Alignment
 import android.text.style.LeadingMarginSpan
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 import androidx.compose.ui.text.android.isLineEllipsized
 import kotlin.math.abs
 
@@ -34,10 +33,7 @@
  * opposite direction.
  *
  * It should be applied to a text only when those three attributes are set.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class IndentationFixSpan : LeadingMarginSpan {
     override fun getLeadingMargin(firstLine: Boolean): Int {
         return 0
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt
index 20c10b4..66a4b31 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt
@@ -17,14 +17,10 @@
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span used to adjust the letter spacing, in the unit of Em.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class LetterSpacingSpanEm(val letterSpacing: Float) : MetricAffectingSpan() {
     override fun updateDrawState(textPaint: TextPaint) {
         textPaint.letterSpacing = letterSpacing
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt
index 6637b34..f885ad5 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt
@@ -3,14 +3,10 @@
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
 import androidx.annotation.Px
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span that sets the letter spacing as [letterSpacing], in the unit of pixel.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class LetterSpacingSpanPx(@Px val letterSpacing: Float) : MetricAffectingSpan() {
     private fun TextPaint.updatePaint() {
         // In framework, 1em letterSpacing equals to textSize * textScaleX pixels.
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt
index 76ed455..3e25ca00 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt
@@ -16,7 +16,6 @@
 package androidx.compose.ui.text.android.style
 
 import android.graphics.Paint.FontMetricsInt
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 import kotlin.math.ceil
 
 /**
@@ -26,10 +25,7 @@
  * @constructor Create a LineHeightSpan which sets the line height to `height` physical pixels.
  * @param lineHeight The specified line height in pixel unit, which is the space between the
  * baseline of adjacent lines.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class LineHeightSpan(
     val lineHeight: Float
 ) : android.text.style.LineHeightSpan {
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt
index 5cb33c1..589c410 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/LineHeightStyleSpan.kt
@@ -17,7 +17,6 @@
 
 import android.graphics.Paint.FontMetricsInt
 import androidx.annotation.FloatRange
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 import kotlin.math.abs
 import kotlin.math.ceil
 
@@ -40,10 +39,7 @@
  * @param topRatio The percentage on how to distribute the line height for a given line.
  * 0 means all space as a result of line height is applied to the bottom. Similarly, 100 means
  * all space as a result of line height is applied to the top.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class LineHeightStyleSpan(
     val lineHeight: Float,
     private val startIndex: Int,
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt
index 6ea2ff3..ce2a33f 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt
@@ -21,7 +21,6 @@
 import android.graphics.Paint
 import android.text.style.ReplacementSpan
 import androidx.annotation.IntDef
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 import kotlin.math.ceil
 import kotlin.math.max
 import kotlin.math.min
@@ -40,9 +39,7 @@
  * @param pxPerSp The number of pixels 1 Sp equals to.
  * @param verticalAlign How the inline element is aligned with the text.
  *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class PlaceholderSpan(
     private val width: Float,
     @Unit
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt
index 79ca207..e43cdcd 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt
@@ -17,14 +17,11 @@
 
 import android.text.TextPaint
 import android.text.style.CharacterStyle
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * A span which applies a shadow effect to the covered text.
  *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class ShadowSpan(
     val color: Int,
     val offsetX: Float,
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt
index 108d90f..d07af14 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt
@@ -17,15 +17,12 @@
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span which shear text in x direction. A pixel at (x, y) will be transfer to (x + y * skewX, y),
  * where y is the distant above baseline.
  *
- * @suppress
  */
-@InternalPlatformTextApi
 internal open class SkewXSpan(val skewX: Float) : MetricAffectingSpan() {
     override fun updateDrawState(textPaint: TextPaint) {
         textPaint.textSkewX = skewX + textPaint.textSkewX
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt
index 528bece7..bc52b89 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/TextDecorationSpan.kt
@@ -18,16 +18,13 @@
 
 import android.text.TextPaint
 import android.text.style.CharacterStyle
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * A span which applies the underline and strike through to the affected text.
  *
  * @property isUnderlineText whether to draw the under for the affected text.
  * @property isStrikethroughText whether to draw strikethrough line for the affected text.
- * @suppress
  */
-@InternalPlatformTextApi
 internal class TextDecorationSpan(
     val isUnderlineText: Boolean,
     val isStrikethroughText: Boolean
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt b/text/text/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt
index 7e7398d..69fd819 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt
@@ -19,7 +19,6 @@
 import android.graphics.Typeface
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span that displays text in the given Typeface. In Android Framework, TypefaceSpan that accepts
@@ -28,10 +27,7 @@
  * @constructor Constructs a [android.text.style.TypefaceSpan] from a [Typeface]. The previous
  * style of the TextPaint is overridden and the style of the typeface is used.
  * @param typeface Typeface to render the text with.
- *
- * @suppress
  */
-@InternalPlatformTextApi
 internal class TypefaceSpan(val typeface: Typeface) : MetricAffectingSpan() {
     override fun updateDrawState(ds: TextPaint) {
         updateTypeface(ds)
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
index ce6d62b..4a3185b 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeToReveal.kt
@@ -16,11 +16,16 @@
 
 package androidx.wear.compose.foundation
 
-import androidx.compose.animation.Crossfade
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.ContentTransform
 import androidx.compose.animation.core.AnimationSpec
+import androidx.compose.animation.core.CubicBezierEasing
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.animateFloatAsState
 import androidx.compose.animation.core.tween
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
+import androidx.compose.animation.scaleIn
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
@@ -41,6 +46,7 @@
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.AbsoluteAlignment
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.graphicsLayer
@@ -52,9 +58,18 @@
 import kotlin.math.roundToInt
 
 /**
- * Standard animation length in milliseconds.
+ * Short animation in milliseconds.
  */
-internal const val STANDARD_ANIMATION = 300
+internal const val SHORT_ANIMATION = 50
+/**
+ * Flash animation length in milliseconds.
+ */
+internal const val FLASH_ANIMATION = 100
+
+/**
+ * Rapid animation length in milliseconds.
+ */
+internal const val RAPID_ANIMATION = 200
 
 /**
  * Quick animation length in milliseconds.
@@ -62,6 +77,11 @@
 internal const val QUICK_ANIMATION = 250
 
 /**
+ * Standard easing for Swipe To Reveal.
+ */
+internal val STANDARD_IN_OUT = CubicBezierEasing(0.20f, 0.0f, 0.0f, 1.00f)
+
+/**
  * Different values which the swipeable modifier can be configured to.
  */
 @ExperimentalWearFoundationApi
@@ -371,18 +391,35 @@
 
         // Draw the buttons only when offset is greater than zero.
         if (abs(state.offset) > 0) {
-            Row(
+            Box(
                 modifier = Modifier.matchParentSize(),
-                horizontalArrangement = Arrangement.Absolute.Right
+                contentAlignment = AbsoluteAlignment.CenterRight
             ) {
-                Crossfade(
+                AnimatedContent(
                     targetState = swipeCompleted && undoAction != null,
-                    animationSpec = tween(durationMillis = STANDARD_ANIMATION),
-                    label = "CrossFadeS2R"
+                    transitionSpec = {
+                        if (targetState) { // Fade in the Undo composable and fade out actions
+                            fadeInUndo()
+                        } else { // Fade in the actions and fade out the undo composable
+                            fadeOutUndo()
+                        }
+                    },
+                    label = "AnimatedContentS2R"
                 ) { displayUndo ->
                     if (displayUndo && undoAction != null) {
+                        val undoActionAlpha = animateFloatAsState(
+                            targetValue = if (swipeCompleted) 1f else 0f,
+                            animationSpec = tween(
+                                durationMillis = RAPID_ANIMATION,
+                                delayMillis = FLASH_ANIMATION,
+                                easing = STANDARD_IN_OUT,
+                            ),
+                            label = "UndoActionAlpha"
+                        )
                         Row(
-                            modifier = Modifier.fillMaxWidth(),
+                            modifier = Modifier
+                                .graphicsLayer { alpha = undoActionAlpha.value }
+                                .fillMaxWidth(),
                             horizontalArrangement = Arrangement.Center
                         ) {
                             ActionSlot(revealScope, content = undoAction)
@@ -394,17 +431,23 @@
                             animationSpec = tween(durationMillis = QUICK_ANIMATION),
                             label = "SecondaryActionAnimationSpec"
                         )
-                        val actionOpacity = animateFloatAsState(
+                        val actionContentAlpha = animateFloatAsState(
                             targetValue = if (hideActions) 0f else 1f,
                             animationSpec = tween(durationMillis = 100, easing = LinearEasing),
-                            label = "ActionOpacity"
+                            label = "ActionContentOpacity"
+                        )
+                        val revealedContentAlpha = animateFloatAsState(
+                            targetValue = if (swipeCompleted) 0f else 1f,
+                            animationSpec = tween(
+                                durationMillis = FLASH_ANIMATION,
+                                easing = LinearEasing
+                            ),
+                            label = "RevealedContentAlpha"
                         )
                         Row(
-                            modifier = if (hideActions) {
-                                Modifier.width(offsetWidth)
-                            } else {
-                                Modifier.width(availableWidth)
-                            },
+                            modifier = Modifier
+                                .graphicsLayer { alpha = revealedContentAlpha.value }
+                                .width(if (hideActions) offsetWidth else availableWidth),
                             horizontalArrangement = Arrangement.Absolute.Right
                         ) {
                             // weight cannot be 0 so remove the composable when weight becomes 0
@@ -413,7 +456,7 @@
                                 ActionSlot(
                                     revealScope,
                                     weight = secondaryActionWeight.value,
-                                    opacity = actionOpacity,
+                                    opacity = actionContentAlpha,
                                     content = secondaryAction,
                                 )
                             }
@@ -421,7 +464,7 @@
                             ActionSlot(
                                 revealScope,
                                 content = primaryAction,
-                                opacity = actionOpacity
+                                opacity = actionContentAlpha
                             )
                         }
                     }
@@ -520,3 +563,48 @@
         }
     }
 }
+
+private fun fadeInUndo(): ContentTransform =
+    ContentTransform(
+        // animation spec for the fading in undo action (fadeIn + scaleIn)
+        targetContentEnter = fadeIn(
+            animationSpec = tween(
+                durationMillis = RAPID_ANIMATION,
+                delayMillis = FLASH_ANIMATION,
+                easing = LinearEasing,
+            )
+        ) + scaleIn(
+            initialScale = 1.2f,
+            animationSpec = tween(
+                durationMillis = RAPID_ANIMATION,
+                delayMillis = FLASH_ANIMATION,
+                easing = STANDARD_IN_OUT
+            )
+        ),
+        // animation spec for the fading out content and actions (fadeOut)
+        initialContentExit = fadeOut(
+            animationSpec = tween(
+                durationMillis = FLASH_ANIMATION,
+                easing = LinearEasing
+            )
+        )
+    )
+
+private fun fadeOutUndo(): ContentTransform =
+    ContentTransform(
+        // No animation, fade-in in 0 milliseconds since enter transition is mandatory
+        targetContentEnter = fadeIn(
+            animationSpec = tween(
+                durationMillis = 0,
+                delayMillis = SHORT_ANIMATION
+            )
+        ),
+
+        // animation spec for the fading out undo action (fadeOut + scaleOut)
+        initialContentExit = fadeOut(
+            animationSpec = tween(
+                durationMillis = SHORT_ANIMATION,
+                easing = LinearEasing
+            )
+        )
+    )
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeableV2.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeableV2.kt
index ff97315..784c92f 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeableV2.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/SwipeableV2.kt
@@ -477,7 +477,11 @@
                 val distance = abs(currentAnchors.getValue(upper) - currentAnchor)
                 val relativeThreshold = abs(positionalThreshold(currentDensity, distance))
                 val absoluteThreshold = abs(currentAnchor + relativeThreshold)
-                if (offset < absoluteThreshold) currentValue else upper
+                if (offset < 0) {
+                    if (abs(offset) > absoluteThreshold) currentValue else upper
+                } else {
+                    if (offset < absoluteThreshold) currentValue else upper
+                }
             }
         } else {
             // Swiping from upper to lower (negative).
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
index 7a6eba0..51ca1f9 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
@@ -463,8 +463,8 @@
      * Items in the ScalingLazyColumn have scaling and alpha effects applied to them depending on
      * their position in the viewport. The closer to the edge (top or bottom) of the viewport that
      * they are the greater the down scaling and transparency that is applied. Note that scaling and
-     * transparency effects are applied from the center of the viewport (full size and normal
-     * transparency) towards the edge (items can be smaller and more transparent).
+     * transparency effects are applied from the center of the viewport (nearest to full size and
+     * normal transparency) towards the edge (items can be smaller and more transparent).
      *
      * Deciding how much scaling and alpha to apply is based on the position and size of the item
      * and on a series of properties that are used to determine the transition area for each item.
@@ -475,10 +475,9 @@
      * than smaller items.
      *
      * [minTransitionArea] and [maxTransitionArea] are both in the range [0f..1f] and are
-     * the fraction of the distance between the edge of the viewport and the center of
-     * the viewport. E.g. a value of 0.2f for minTransitionArea and 0.75f for maxTransitionArea
-     * determines that all transition lines will fall between 1/5th (20%) and 3/4s (75%) of the
-     * distance between the viewport edge and center.
+     * the fraction of the distance between the edges of the viewport. E.g. a value of 0.2f for
+     * minTransitionArea and 0.75f for maxTransitionArea determines that all transition lines will
+     * fall between 1/5th (20%) and 3/4s (75%) of the height of the viewport.
      *
      * The size of the each item is used to determine where within the transition area range
      * minTransitionArea..maxTransitionArea the actual transition line will be. [minElementHeight]
@@ -536,13 +535,11 @@
      *
      * @param minTransitionArea The lower bound of the transition line area, closest to the
      * edge of the viewport. Defined as a fraction (value between 0f..1f) of the distance between
-     * the viewport edge and viewport center line. Must be less than or equal to
-     * [maxTransitionArea].
+     * the viewport edges. Must be less than or equal to [maxTransitionArea].
      *
      * @param maxTransitionArea The upper bound of the transition line area, closest to the
      * center of the viewport. The fraction (value between 0f..1f) of the distance
-     * between the viewport edge and viewport center line. Must be greater
-     * than or equal to [minTransitionArea].
+     * between the viewport edges. Must be greater than or equal to [minTransitionArea].
      *
      * @param scaleInterpolator An interpolator to use to determine how to apply scaling as a
      * item transitions across the scaling transition area.
diff --git a/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/RepeatableClickable.kt b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/RepeatableClickable.kt
deleted file mode 100644
index 545a576..0000000
--- a/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/RepeatableClickable.kt
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.wear.compose.materialcore
-
-import androidx.compose.foundation.layout.Box
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.junit4.ComposeContentTestRule
-import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.test.onNodeWithTag
-import androidx.compose.ui.test.performTouchInput
-import org.junit.Assert.assertEquals
-import org.junit.Rule
-import org.junit.Test
-
-public class RepeatableClickable {
-    @get:Rule
-    public val rule = createComposeRule()
-
-    @Test
-    fun touch_hold_shorter_than_threshold() {
-        var clickCounter = 0
-
-        boxWithRepeatableClickable(rule, 300) {
-            clickCounter++
-        }
-
-        assertEquals(0, clickCounter)
-    }
-
-    @Test
-    fun touch_hold_equals_to_threshold() {
-        var clickCounter = 0
-
-        boxWithRepeatableClickable(rule, 500) {
-            clickCounter++
-        }
-
-        assertEquals(1, clickCounter)
-    }
-
-    @Test
-    fun touch_hold_longer_than_threshold() {
-        var clickCounter = 0
-
-        boxWithRepeatableClickable(rule, 620) {
-            clickCounter++
-        }
-
-        assertEquals(3, clickCounter)
-    }
-
-    @Test
-    fun touch_hold_disabled() {
-        var clickCounter = 0
-
-        boxWithRepeatableClickable(rule, 500, false) {
-            clickCounter++
-        }
-
-        assertEquals(0, clickCounter)
-    }
-
-    private fun boxWithRepeatableClickable(
-        rule: ComposeContentTestRule,
-        holdDelay: Long,
-        enabled: Boolean = true,
-        initialDelay: Long = 500L,
-        incrementalDelay: Long = 60L,
-        onClick: () -> Unit
-    ) {
-
-        rule.setContent {
-            Box(
-                modifier = Modifier
-                    .testTag(TEST_TAG)
-                    .repeatableClickable(
-                        enabled = enabled,
-                        initialDelay = initialDelay,
-                        incrementalDelay = incrementalDelay
-                    ) {
-                        onClick()
-                    }
-            ) {}
-        }
-
-        rule.onNodeWithTag(TEST_TAG).performTouchInput {
-            down(center)
-            advanceEventTime(holdDelay)
-            up()
-        }
-    }
-}
diff --git a/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/RepeatableClickableTest.kt b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/RepeatableClickableTest.kt
new file mode 100644
index 0000000..895034c
--- /dev/null
+++ b/wear/compose/compose-material-core/src/androidTest/kotlin/androidx/wear/compose/materialcore/RepeatableClickableTest.kt
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.wear.compose.materialcore
+
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.junit4.ComposeContentTestRule
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performTouchInput
+import androidx.compose.ui.unit.dp
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+
+public class RepeatableClickableTest {
+    @get:Rule
+    public val rule = createComposeRule()
+
+    @Test
+    fun touch_hold_shorter_than_threshold_performs_click() {
+        var repeatableClickCounter = 0
+        var clicked = false
+
+        boxWithRepeatableClickable(rule,
+            holdDelay = INITIAL_DELAY / 2,
+            onRepeatableClick = { repeatableClickCounter++ },
+            onClick = { clicked = true }
+        )
+        assertEquals(0, repeatableClickCounter)
+        assertEquals(true, clicked)
+    }
+
+    @Test
+    fun touch_hold_equals_to_threshold_performs_repeatable_click() {
+        var repeatableClickCounter = 0
+        var clicked = false
+
+        boxWithRepeatableClickable(rule,
+            holdDelay = INITIAL_DELAY,
+            onRepeatableClick = { repeatableClickCounter++ },
+            onClick = { clicked = true }
+        )
+        assertEquals(1, repeatableClickCounter)
+        assertEquals(false, clicked)
+    }
+
+    @Test
+    fun touch_hold_longer_than_threshold_performs_multiple_repeatable_clicks() {
+        var repeatableClickCounter = 0
+        var clicked = false
+
+        boxWithRepeatableClickable(rule,
+            holdDelay = INITIAL_DELAY + INCREMENTAL_DELAY * 2,
+            onRepeatableClick = { repeatableClickCounter++ },
+            onClick = { clicked = true }
+        )
+
+        assertEquals(3, repeatableClickCounter)
+        assertEquals(false, clicked)
+    }
+
+    @Test
+    fun touch_hold_disabled() {
+        var repeatableClickCounter = 0
+        var clicked = false
+
+        boxWithRepeatableClickable(rule,
+            holdDelay = INITIAL_DELAY,
+            enabled = false,
+            onRepeatableClick = { repeatableClickCounter++ },
+            onClick = { clicked = true }
+        )
+
+        assertEquals(0, repeatableClickCounter)
+        assertEquals(false, clicked)
+    }
+
+    @Test
+    fun touch_hold_release_outside_of_bounds_shorter_than_threshold() {
+        var repeatableClickCounter = 0
+        var clicked = false
+
+        boxWithRepeatableClickable(rule,
+            holdDelay = INITIAL_DELAY / 2,
+            enabled = true,
+            releaseOutsideOfBox = true,
+            onRepeatableClick = { repeatableClickCounter++ },
+            onClick = { clicked = true }
+        )
+
+        assertEquals(0, repeatableClickCounter)
+        assertEquals(false, clicked)
+    }
+
+    private fun boxWithRepeatableClickable(
+        rule: ComposeContentTestRule,
+        holdDelay: Long,
+        enabled: Boolean = true,
+        initialDelay: Long = INITIAL_DELAY,
+        incrementalDelay: Long = INCREMENTAL_DELAY,
+        releaseOutsideOfBox: Boolean = false,
+        onClick: () -> Unit,
+        onRepeatableClick: () -> Unit
+    ) {
+        rule.setContent {
+            Box(
+                modifier = Modifier
+                    .fillMaxSize()
+            ) {
+                Box(
+                    modifier = Modifier
+                        .testTag(TEST_TAG)
+                        .size(50.dp)
+                        .align(Alignment.Center)
+                        .repeatableClickable(
+                            enabled = enabled,
+                            initialDelay = initialDelay,
+                            incrementalDelay = incrementalDelay,
+                            indication = null,
+                            interactionSource = remember { MutableInteractionSource() },
+                            onClick = onClick,
+                            onRepeatableClick = onRepeatableClick
+                        )
+                ) {}
+            }
+        }
+
+        rule.onNodeWithTag(TEST_TAG).performTouchInput {
+            down(center)
+            advanceEventTime(holdDelay)
+            if (releaseOutsideOfBox) {
+                // Move to -1f,-1f coordinates which are outside of the current component
+                moveTo(Offset(-1f, -1f))
+            }
+            up()
+        }
+    }
+
+    companion object {
+        private const val INITIAL_DELAY = 500L
+        private const val INCREMENTAL_DELAY = 60L
+    }
+}
diff --git a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/RepeatableClickable.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/RepeatableClickable.kt
index da01843..b5ac77f 100644
--- a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/RepeatableClickable.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/RepeatableClickable.kt
@@ -17,46 +17,106 @@
 package androidx.wear.compose.materialcore
 
 import androidx.annotation.RestrictTo
+import androidx.compose.foundation.Indication
+import androidx.compose.foundation.LocalIndication
+import androidx.compose.foundation.clickable
 import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.waitForUpOrCancellation
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.PressInteraction
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberUpdatedState
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.composed
 import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.semantics.Role
 import kotlinx.coroutines.coroutineScope
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 
 /**
  * This modifier provides functionality to increment or decrement values repeatedly
- * by holding down the composable
+ * by holding down the composable.
+ * Should be used instead of clickable modifier to achieve clickable and repeatable
+ * clickable behavior. Can't be used along with clickable modifier as it already implements it.
+ *
+ * Callbacks [onClick] and [onRepeatableClick] are different. [onClick] is triggered only
+ * when the hold duration is shorter than [initialDelay] and no repeatable clicks happened.
+ * [onRepeatableClick] is repeatedly triggered when the hold duration is longer
+ * than [initialDelay] with [incrementalDelay] intervals.
+ *
+ * @param interactionSource [MutableInteractionSource] that will be used to dispatch
+ * [PressInteraction.Press] when this clickable is pressed. Only the initial (first) press will be
+ * recorded and dispatched with [MutableInteractionSource].
+ * @param indication indication to be shown when modified element is pressed. By default,
+ * indication from [LocalIndication] will be used. Pass `null` to show no indication, or
+ * current value from [LocalIndication] to show theme default
+ * @param enabled Controls the enabled state. When `false`, [onClick], and this modifier will
+ * appear disabled for accessibility services
+ * @param onClickLabel semantic / accessibility label for the [onClick] action
+ * @param role the type of user interface element. Accessibility services might use this
+ * to describe the element or do customizations
+ * @param initialDelay The initial delay before the click starts repeating, in ms
+ * @param incrementalDelay The delay between each repeated click, in ms
+ * @param onClick will be called when user clicks on the element
+ * @param onRepeatableClick will be called after the [initialDelay] with [incrementalDelay]
+ * between each call until the touch is released
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public fun Modifier.repeatableClickable(
-    enabled: Boolean,
+fun Modifier.repeatableClickable(
+    interactionSource: MutableInteractionSource,
+    indication: Indication?,
+    enabled: Boolean = true,
+    onClickLabel: String? = null,
+    role: Role? = null,
     initialDelay: Long = 500L,
     incrementalDelay: Long = 60L,
-    onClick: () -> Unit
+    onClick: () -> Unit,
+    onRepeatableClick: () -> Unit = onClick
 ): Modifier = composed {
-
+    val currentOnRepeatableClick by rememberUpdatedState(onRepeatableClick)
     val currentOnClick by rememberUpdatedState(onClick)
+    // This flag is used for checking whether the onClick should be ignored or not.
+    // If this flag is true, then it means that repeatable click happened and onClick
+    // shouldn't be triggered.
+    var ignoreOnClick by remember { mutableStateOf(false) }
 
-    pointerInput(enabled) {
-        coroutineScope {
-            awaitEachGesture {
-                awaitFirstDown()
-                val repeatingJob = launch {
-                    delay(initialDelay)
-                    while (enabled) {
-                        currentOnClick()
-                        delay(incrementalDelay)
+    // Repeatable logic should always follow the clickable, as the lowest modifier finishes first,
+    // and we have to be sure that repeatable goes before clickable.
+    clickable(
+        interactionSource = interactionSource,
+        indication = indication,
+        enabled = enabled,
+        onClickLabel = onClickLabel,
+        role = role,
+        onClick = {
+            if (!ignoreOnClick) {
+                currentOnClick()
+            }
+            ignoreOnClick = false
+        },
+    )
+        .pointerInput(enabled) {
+            coroutineScope {
+                awaitEachGesture {
+                    awaitFirstDown()
+                    ignoreOnClick = false
+                    val repeatingJob = launch {
+                        delay(initialDelay)
+                        ignoreOnClick = true
+                        while (enabled) {
+                            currentOnRepeatableClick()
+                            delay(incrementalDelay)
+                        }
                     }
+                    // Waiting for up or cancellation of the gesture.
+                    waitForUpOrCancellation()
+                    repeatingJob.cancel()
                 }
-                waitForUpOrCancellation()
-                repeatingJob.cancel()
             }
         }
-    }
 }
diff --git a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Slider.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Slider.kt
index 065d3d0..637a82c 100644
--- a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Slider.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Slider.kt
@@ -18,7 +18,6 @@
 
 import androidx.annotation.RestrictTo
 import androidx.compose.foundation.LocalIndication
-import androidx.compose.foundation.clickable
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxHeight
@@ -48,13 +47,12 @@
         modifier = Modifier
             .width(buttonControlSize)
             .fillMaxHeight()
-            .clickable(
+            .repeatableClickable(
                 enabled = enabled,
                 onClick = onClick,
                 interactionSource = remember { MutableInteractionSource() },
-                indication = LocalIndication.current,
+                indication = LocalIndication.current
             )
-            .repeatableClickable(enabled = enabled, onClick = onClick)
             .then(modifier),
         contentAlignment = contentAlignment
     ) {
diff --git a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Stepper.kt b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Stepper.kt
index d1a25d0..70428a4 100644
--- a/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Stepper.kt
+++ b/wear/compose/compose-material-core/src/main/java/androidx/wear/compose/materialcore/Stepper.kt
@@ -18,7 +18,6 @@
 
 import androidx.annotation.RestrictTo
 import androidx.compose.foundation.background
-import androidx.compose.foundation.clickable
 import androidx.compose.foundation.indication
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.layout.Arrangement
@@ -39,7 +38,6 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.semantics.Role
 import androidx.compose.ui.unit.dp
 
 /**
@@ -156,10 +154,12 @@
         modifier = Modifier
             .fillMaxWidth()
             .weight(StepperDefaults.ButtonWeight)
-            .clickable(
-                interactionSource, null, onClick = onClick, enabled = enabled, role = Role.Button
+            .repeatableClickable(
+                enabled = enabled,
+                onClick = onClick,
+                interactionSource = interactionSource,
+                indication = null
             )
-            .repeatableClickable(enabled = enabled, onClick = onClick)
             .wrapContentWidth()
             .indication(interactionSource, rememberRipple(bounded = false))
             .padding(paddingValues),
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonDemo.kt
index d2c396f..d145249 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ButtonDemo.kt
@@ -21,7 +21,6 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.size
 import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.AccountCircle
 import androidx.compose.material.icons.filled.Favorite
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
@@ -252,10 +251,10 @@
             MultilineButton(enabled = false)
         }
         item {
-            MultilineButton(enabled = true, icon = { StandardIcon() })
+            MultilineButton(enabled = true, icon = { StandardIcon(ButtonDefaults.IconSize) })
         }
         item {
-            MultilineButton(enabled = false, icon = { StandardIcon() })
+            MultilineButton(enabled = false, icon = { StandardIcon(ButtonDefaults.IconSize) })
         }
         item {
             ListHeader {
@@ -269,10 +268,10 @@
             Multiline3SlotButton(enabled = false)
         }
         item {
-            Multiline3SlotButton(enabled = true, icon = { StandardIcon() })
+            Multiline3SlotButton(enabled = true, icon = { StandardIcon(ButtonDefaults.IconSize) })
         }
         item {
-            Multiline3SlotButton(enabled = false, icon = { StandardIcon() })
+            Multiline3SlotButton(enabled = false, icon = { StandardIcon(ButtonDefaults.IconSize) })
         }
     }
 }
@@ -378,21 +377,3 @@
         colors = colors,
     )
 }
-
-@Composable
-private fun StandardIcon() {
-    Icon(
-        Icons.Filled.Favorite,
-        contentDescription = "Favorite icon",
-        modifier = Modifier.size(ButtonDefaults.IconSize)
-    )
-}
-
-@Composable
-private fun AvatarIcon() {
-    Icon(
-        Icons.Filled.AccountCircle,
-        contentDescription = "Account",
-        modifier = Modifier.size(ButtonDefaults.LargeIconSize)
-    )
-}
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
index 3c8a66f..e485230 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/CardDemo.kt
@@ -22,8 +22,6 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
@@ -35,7 +33,6 @@
 import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
 import androidx.wear.compose.material3.AppCard
 import androidx.wear.compose.material3.CardDefaults
-import androidx.wear.compose.material3.Icon
 import androidx.wear.compose.material3.ListHeader
 import androidx.wear.compose.material3.Text
 import androidx.wear.compose.material3.samples.AppCardSample
@@ -77,15 +74,7 @@
     AppCard(
         onClick = { /* Do something */ },
         appName = { Text("App name") },
-        appImage = {
-            Icon(
-                painter = painterResource(id = android.R.drawable.star_big_off),
-                contentDescription = "favourites",
-                modifier = Modifier
-                    .size(CardDefaults.AppImageSize)
-                    .wrapContentSize(align = Alignment.Center),
-            )
-        },
+        appImage = { StandardIcon(CardDefaults.AppImageSize) },
         title = { Text("With image") },
         time = { Text("now") },
     ) {
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconButtonDemo.kt
index 57c962e..8ecebb0 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconButtonDemo.kt
@@ -19,10 +19,7 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.requiredSize
 import androidx.compose.foundation.layout.width
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Favorite
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -32,7 +29,6 @@
 import androidx.wear.compose.material3.ButtonDefaults
 import androidx.wear.compose.material3.FilledIconButton
 import androidx.wear.compose.material3.FilledTonalIconButton
-import androidx.wear.compose.material3.Icon
 import androidx.wear.compose.material3.IconButton
 import androidx.wear.compose.material3.IconButtonDefaults
 import androidx.wear.compose.material3.ListHeader
@@ -63,7 +59,7 @@
                     onClick = { },
                     enabled = false
                 ) {
-                    StandardIcon()
+                    StandardIcon(ButtonDefaults.IconSize)
                 }
             }
         }
@@ -80,7 +76,7 @@
                     onClick = { },
                     enabled = false
                 ) {
-                    StandardIcon()
+                    StandardIcon(ButtonDefaults.IconSize)
                 }
             }
         }
@@ -97,7 +93,7 @@
                     onClick = { },
                     enabled = false
                 ) {
-                    StandardIcon()
+                    StandardIcon(ButtonDefaults.IconSize)
                 }
             }
         }
@@ -114,7 +110,7 @@
                     onClick = { },
                     enabled = false
                 ) {
-                    StandardIcon()
+                    StandardIcon(ButtonDefaults.IconSize)
                 }
             }
         }
@@ -155,15 +151,6 @@
 }
 
 @Composable
-private fun StandardIcon(iconSize: Dp = ButtonDefaults.IconSize) {
-    Icon(
-        Icons.Filled.Favorite,
-        contentDescription = "Favorite icon",
-        modifier = Modifier.requiredSize(iconSize)
-    )
-}
-
-@Composable
 private fun IconButtonWithSize(size: Dp) {
     FilledTonalIconButton(
         modifier = Modifier.touchTargetAwareSize(size),
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconToggleButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconToggleButtonDemo.kt
index 18affc7..ef8468e 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconToggleButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/IconToggleButtonDemo.kt
@@ -19,10 +19,15 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Favorite
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.unit.Dp
@@ -49,16 +54,16 @@
         }
         item {
             Row {
-                IconToggleButtonSample() // Enabled
+                IconToggleButtonSample() // Enabled & checked
                 Spacer(modifier = Modifier.width(5.dp))
-                IconToggleButtonsDemo(enabled = true, checked = false) // Unchecked and enabled
+                IconToggleButtonsDemo(enabled = true, initialChecked = false)
             }
         }
         item {
             Row {
-                IconToggleButtonsDemo(enabled = false, checked = true) // Checked and disabled
+                IconToggleButtonsDemo(enabled = false, initialChecked = true)
                 Spacer(modifier = Modifier.width(5.dp))
-                IconToggleButtonsDemo(enabled = false, checked = false) // Unchecked and disabled
+                IconToggleButtonsDemo(enabled = false, initialChecked = false)
             }
         }
         item {
@@ -72,7 +77,7 @@
                 Spacer(Modifier.width(4.dp))
                 IconToggleButtonsDemo(
                     enabled = true,
-                    checked = true,
+                    initialChecked = true,
                     size = IconButtonDefaults.LargeButtonSize
                 )
             }
@@ -83,7 +88,7 @@
                 Spacer(Modifier.width(4.dp))
                 IconToggleButtonsDemo(
                     enabled = true,
-                    checked = true,
+                    initialChecked = true,
                     size = IconButtonDefaults.DefaultButtonSize
                 )
             }
@@ -94,7 +99,7 @@
                 Spacer(Modifier.width(4.dp))
                 IconToggleButtonsDemo(
                     enabled = true,
-                    checked = true,
+                    initialChecked = true,
                     size = IconButtonDefaults.SmallButtonSize
                 )
             }
@@ -105,7 +110,7 @@
                 Spacer(Modifier.width(4.dp))
                 IconToggleButtonsDemo(
                     enabled = true,
-                    checked = true,
+                    initialChecked = true,
                     size = IconButtonDefaults.ExtraSmallButtonSize
                 )
             }
@@ -116,18 +121,20 @@
 @Composable
 private fun IconToggleButtonsDemo(
     enabled: Boolean,
-    checked: Boolean,
+    initialChecked: Boolean,
     size: Dp = IconButtonDefaults.DefaultButtonSize
 ) {
+    var checked by remember { mutableStateOf(initialChecked) }
     IconToggleButton(
         checked = checked,
         enabled = enabled,
         modifier = Modifier.touchTargetAwareSize(size),
-        onCheckedChange = {} // Do not update the state
+        onCheckedChange = { checked = !checked }
     ) {
         Icon(
             imageVector = Icons.Filled.Favorite,
-            contentDescription = "Flight Mode"
+            contentDescription = "Flight Mode",
+            modifier = Modifier.size(IconButtonDefaults.iconSizeFor(size))
         )
     }
 }
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/Icons.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/Icons.kt
new file mode 100644
index 0000000..79aa8d2
--- /dev/null
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/Icons.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.wear.compose.material3.demos
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.AccountCircle
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.Dp
+import androidx.wear.compose.material3.ButtonDefaults
+import androidx.wear.compose.material3.Icon
+
+@Composable
+internal fun StandardIcon(size: Dp) {
+    Icon(
+        Icons.Filled.Favorite,
+        contentDescription = "Favorite icon",
+        modifier = Modifier.size(size)
+    )
+}
+
+@Composable
+internal fun AvatarIcon() {
+    Icon(
+        Icons.Filled.AccountCircle,
+        contentDescription = "Account",
+        modifier = Modifier.size(ButtonDefaults.LargeIconSize)
+    )
+}
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SelectionControlsDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SelectionControlsDemo.kt
index 1ade790..0e1a164 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SelectionControlsDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SelectionControlsDemo.kt
@@ -20,7 +20,6 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.width
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
@@ -34,9 +33,6 @@
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.dp
 import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
-import androidx.wear.compose.integration.demos.common.Centralize
-import androidx.wear.compose.integration.demos.common.ComposableDemo
-import androidx.wear.compose.integration.demos.common.DemoCategory
 import androidx.wear.compose.material3.Checkbox
 import androidx.wear.compose.material3.ListHeader
 import androidx.wear.compose.material3.RadioButton
@@ -47,47 +43,8 @@
 import androidx.wear.compose.material3.samples.RtlSwitchSample
 import androidx.wear.compose.material3.samples.SwitchSample
 
-val selectionControlsDemos = listOf(
-    DemoCategory(
-        "Samples",
-        listOf(
-            ComposableDemo("Checkbox sample") {
-                Centralize(Modifier.padding(horizontal = 10.dp)) {
-                    CheckboxSample()
-                }
-            },
-            ComposableDemo("Switch sample") {
-                Centralize(Modifier.padding(horizontal = 10.dp)) {
-                    SwitchSample()
-                }
-            },
-            ComposableDemo("Rtl Switch sample") {
-                Centralize(Modifier.padding(horizontal = 10.dp)) {
-                    RtlSwitchSample()
-                }
-            },
-            ComposableDemo("RadioButton sample") {
-                Centralize(Modifier.padding(horizontal = 10.dp)) {
-                    RadioButtonSample()
-                }
-            },
-        )
-    ),
-    DemoCategory("Demos", listOf(
-        ComposableDemo("Checkbox demos") {
-            CheckboxDemos()
-        },
-        ComposableDemo("Switch demos") {
-            SwitchDemos()
-        },
-        ComposableDemo("RadioButton demos") {
-            RadioButtonDemos()
-        }
-    ))
-)
-
 @Composable
-private fun CheckboxDemos() {
+fun CheckboxDemos() {
     ScalingLazyColumn(
         modifier = Modifier
             .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally,
@@ -98,14 +55,11 @@
         }
         item {
             Row {
-                var checked1 by remember { mutableStateOf(false) }
-                Checkbox(checked = checked1, onCheckedChange = {
-                    checked1 = it
-                })
+                CheckboxSample()
                 Spacer(modifier = Modifier.width(10.dp))
-                var checked2 by remember { mutableStateOf(true) }
-                Checkbox(checked = checked2, onCheckedChange = {
-                    checked2 = it
+                var checked by remember { mutableStateOf(true) }
+                Checkbox(checked = checked, onCheckedChange = {
+                    checked = it
                 })
             }
         }
@@ -129,7 +83,7 @@
 }
 
 @Composable
-private fun SwitchDemos() {
+fun SwitchDemos() {
     ScalingLazyColumn(
         modifier = Modifier
             .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally,
@@ -140,36 +94,15 @@
         }
         item {
             Row {
-                var checked1 by remember { mutableStateOf(false) }
-                Switch(checked = checked1, onCheckedChange = {
-                    checked1 = it
-                })
+                SwitchSample()
                 Spacer(modifier = Modifier.width(10.dp))
-                var checked2 by remember { mutableStateOf(true) }
-                Switch(checked = checked2, onCheckedChange = {
-                    checked2 = it
+                var checked by remember { mutableStateOf(true) }
+                Switch(checked = checked, onCheckedChange = {
+                    checked = it
                 })
             }
         }
         item {
-            ListHeader { Text(text = "RTL Switch") }
-        }
-        item {
-            CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
-                Row {
-                    var checked1 by remember { mutableStateOf(true) }
-                    Switch(checked = checked1, onCheckedChange = {
-                        checked1 = it
-                    })
-                    Spacer(modifier = Modifier.width(10.dp))
-                    var checked2 by remember { mutableStateOf(false) }
-                    Switch(checked = checked2, onCheckedChange = {
-                        checked2 = it
-                    })
-                }
-            }
-        }
-        item {
             ListHeader { Text(text = "Disabled Switch") }
         }
         item {
@@ -185,11 +118,26 @@
                 )
             }
         }
+        item {
+            ListHeader { Text(text = "RTL Switch") }
+        }
+        item {
+            CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
+                Row {
+                    var checked by remember { mutableStateOf(true) }
+                    Switch(checked = checked, onCheckedChange = {
+                        checked = it
+                    })
+                    Spacer(modifier = Modifier.width(10.dp))
+                    RtlSwitchSample()
+                }
+            }
+        }
     }
 }
 
 @Composable
-private fun RadioButtonDemos() {
+fun RadioButtonDemos() {
     ScalingLazyColumn(
         modifier = Modifier
             .fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally,
@@ -200,14 +148,11 @@
         }
         item {
             Row {
-                var selected1 by remember { mutableStateOf(false) }
-                RadioButton(selected = selected1, onClick = {
-                    selected1 = !selected1
-                })
+                RadioButtonSample()
                 Spacer(modifier = Modifier.width(10.dp))
-                var selected2 by remember { mutableStateOf(true) }
-                RadioButton(selected = selected2, onClick = {
-                    selected2 = !selected2
+                var selected by remember { mutableStateOf(true) }
+                RadioButton(selected = selected, onClick = {
+                    selected = !selected
                 })
             }
         }
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextButtonDemo.kt
index 4f814a3..807cd0f 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextButtonDemo.kt
@@ -23,16 +23,19 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
 import androidx.wear.compose.material3.ButtonDefaults
 import androidx.wear.compose.material3.ListHeader
+import androidx.wear.compose.material3.MaterialTheme
 import androidx.wear.compose.material3.Text
 import androidx.wear.compose.material3.TextButton
 import androidx.wear.compose.material3.TextButtonDefaults
 import androidx.wear.compose.material3.samples.FilledTextButtonSample
 import androidx.wear.compose.material3.samples.FilledTonalTextButtonSample
+import androidx.wear.compose.material3.samples.LargeFilledTonalTextButtonSample
 import androidx.wear.compose.material3.samples.OutlinedTextButtonSample
 import androidx.wear.compose.material3.samples.TextButtonSample
 import androidx.wear.compose.material3.touchTargetAwareSize
@@ -121,7 +124,7 @@
             Row(verticalAlignment = Alignment.CenterVertically) {
                 Text("${TextButtonDefaults.LargeButtonSize.value.toInt()}dp")
                 Spacer(Modifier.width(4.dp))
-                TextButtonWithSize(TextButtonDefaults.LargeButtonSize)
+                LargeFilledTonalTextButtonSample()
             }
         }
         item {
@@ -149,6 +152,13 @@
         enabled = true,
         colors = TextButtonDefaults.filledTonalTextButtonColors()
     ) {
-        Text(text = "AB")
+        Text(text = "ABC", style = textStyleFor(size))
     }
 }
+
+@Composable
+private fun textStyleFor(size: Dp): TextStyle =
+    if (size <= TextButtonDefaults.DefaultButtonSize)
+        MaterialTheme.typography.labelMedium
+    else
+        MaterialTheme.typography.labelLarge
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextToggleButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextToggleButtonDemo.kt
index 0025ac5..0dd3783 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextToggleButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/TextToggleButtonDemo.kt
@@ -21,6 +21,10 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.width
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.unit.Dp
@@ -30,6 +34,7 @@
 import androidx.wear.compose.material3.Text
 import androidx.wear.compose.material3.TextButtonDefaults
 import androidx.wear.compose.material3.TextToggleButton
+import androidx.wear.compose.material3.samples.LargeTextToggleButtonSample
 import androidx.wear.compose.material3.samples.TextToggleButtonSample
 import androidx.wear.compose.material3.touchTargetAwareSize
 
@@ -46,16 +51,16 @@
         }
         item {
             Row {
-                TextToggleButtonSample() // Enabled
+                TextToggleButtonSample() // Enabled and checked
                 Spacer(modifier = Modifier.width(5.dp))
-                TextToggleButtonsDemo(enabled = true, checked = false) // Enabled and unchecked
+                TextToggleButtonsDemo(enabled = true, initialChecked = false)
             }
         }
         item {
             Row {
-                TextToggleButtonsDemo(enabled = false, checked = true) // Checked and disabled
+                TextToggleButtonsDemo(enabled = false, initialChecked = true)
                 Spacer(modifier = Modifier.width(5.dp))
-                TextToggleButtonsDemo(enabled = false, checked = false) // Unchecked and disabled
+                TextToggleButtonsDemo(enabled = false, initialChecked = false)
             }
         }
         item {
@@ -67,11 +72,7 @@
             Row(verticalAlignment = Alignment.CenterVertically) {
                 Text("${TextButtonDefaults.LargeButtonSize.value.toInt()}dp")
                 Spacer(Modifier.width(4.dp))
-                TextToggleButtonsDemo(
-                    enabled = true,
-                    checked = true,
-                    size = TextButtonDefaults.LargeButtonSize
-                )
+                LargeTextToggleButtonSample()
             }
         }
         item {
@@ -80,7 +81,7 @@
                 Spacer(Modifier.width(4.dp))
                 TextToggleButtonsDemo(
                     enabled = true,
-                    checked = true,
+                    initialChecked = true,
                     size = TextButtonDefaults.DefaultButtonSize
                 )
             }
@@ -91,7 +92,7 @@
                 Spacer(Modifier.width(4.dp))
                 TextToggleButtonsDemo(
                     enabled = true,
-                    checked = true,
+                    initialChecked = true,
                     size = TextButtonDefaults.SmallButtonSize
                 )
             }
@@ -102,14 +103,15 @@
 @Composable
 private fun TextToggleButtonsDemo(
     enabled: Boolean,
-    checked: Boolean,
+    initialChecked: Boolean,
     size: Dp = TextButtonDefaults.DefaultButtonSize
 ) {
+    var checked by remember { mutableStateOf(initialChecked) }
     TextToggleButton(
         checked = checked,
         enabled = enabled,
         modifier = Modifier.touchTargetAwareSize(size),
-        onCheckedChange = {} // Do not update the state,
+        onCheckedChange = { checked = !checked },
     ) {
         Text(
             text = if (checked) "On" else "Off"
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
index 01c97d0..32001cf5 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/WearMaterial3Demos.kt
@@ -54,6 +54,11 @@
                 },
             )
         ),
+        ComposableDemo("List Header") {
+            Centralize {
+                ListHeaderDemo()
+            }
+        },
         ComposableDemo("Card") {
             CardDemo()
         },
@@ -63,6 +68,25 @@
         ComposableDemo("Icon Button") {
             IconButtonDemo()
         },
+        ComposableDemo("Text Toggle Button") {
+            TextToggleButtonDemo()
+        },
+        ComposableDemo("Icon Toggle Button") {
+            IconToggleButtonDemo()
+        },
+        ComposableDemo("Checkbox") {
+            CheckboxDemos()
+        },
+        ComposableDemo("Switch") {
+            SwitchDemos()
+        },
+        ComposableDemo("Radio Button") {
+            RadioButtonDemos()
+        },
+        DemoCategory(
+            title = "Toggle Button",
+            toggleButtonDemos
+        ),
         DemoCategory(
             "Stepper",
             listOf(
@@ -86,31 +110,12 @@
             "Slider",
             SliderDemos
         ),
-        ComposableDemo("List Header") {
-            Centralize {
-                ListHeaderDemo()
-            }
-        },
-        ComposableDemo("Text Toggle Button") {
-            TextToggleButtonDemo()
-        },
-        ComposableDemo("Icon Toggle Button") {
-            IconToggleButtonDemo()
-        },
         ComposableDemo(
             title = "Fixed Font Size"
         ) {
             Centralize { FixedFontSize() }
         },
         DemoCategory(
-            title = "Selection Controls",
-            selectionControlsDemos
-        ),
-        DemoCategory(
-            title = "Toggle Button",
-            toggleButtonDemos
-        ),
-        DemoCategory(
             title = "Swipe To Dismiss",
             listOf(
                 ComposableDemo("Simple") { SimpleSwipeToDismissBox(it.navigateBack) },
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
index 17424be..8e83f1e 100644
--- a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/CardSample.kt
@@ -68,7 +68,7 @@
         appImage = {
             Icon(
                 painter = painterResource(id = android.R.drawable.star_big_off),
-                contentDescription = "favourites",
+                contentDescription = "Star icon",
                 modifier = Modifier
                     .size(CardDefaults.AppImageSize)
                     .wrapContentSize(align = Alignment.Center),
@@ -132,7 +132,7 @@
         appImage = {
             Icon(
                 Icons.Filled.Favorite,
-                contentDescription = "favourites",
+                contentDescription = "Favorite icon",
                 modifier = Modifier.size(CardDefaults.AppImageSize)
             )
         },
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextButtonSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextButtonSample.kt
index 98ccaac..64dde42 100644
--- a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextButtonSample.kt
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextButtonSample.kt
@@ -17,8 +17,11 @@
 package androidx.wear.compose.material3.samples
 
 import androidx.annotation.Sampled
+import androidx.compose.foundation.layout.size
 import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
 import androidx.wear.compose.material3.ButtonDefaults
+import androidx.wear.compose.material3.MaterialTheme
 import androidx.wear.compose.material3.Text
 import androidx.wear.compose.material3.TextButton
 import androidx.wear.compose.material3.TextButtonDefaults
@@ -44,6 +47,19 @@
 
 @Composable
 @Sampled
+fun LargeFilledTonalTextButtonSample() {
+    TextButton(
+        onClick = { /* Do something */ },
+        colors = TextButtonDefaults.filledTonalTextButtonColors(),
+        modifier = Modifier.size(TextButtonDefaults.LargeButtonSize)
+    ) {
+        // For large TextButton, use [Typography.labelLarge].
+        Text(text = "ABC", style = MaterialTheme.typography.labelLarge)
+    }
+}
+
+@Composable
+@Sampled
 fun FilledTonalTextButtonSample() {
     TextButton(
         onClick = { /* Do something */ },
diff --git a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextToggleButtonSample.kt b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextToggleButtonSample.kt
index c680a7c..7cabde1 100644
--- a/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextToggleButtonSample.kt
+++ b/wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/TextToggleButtonSample.kt
@@ -22,8 +22,12 @@
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.wear.compose.material3.MaterialTheme
 import androidx.wear.compose.material3.Text
+import androidx.wear.compose.material3.TextButtonDefaults
 import androidx.wear.compose.material3.TextToggleButton
+import androidx.wear.compose.material3.touchTargetAwareSize
 
 @Sampled
 @Composable
@@ -38,3 +42,19 @@
         )
     }
 }
+
+@Sampled
+@Composable
+fun LargeTextToggleButtonSample() {
+    var checked by remember { mutableStateOf(true) }
+    TextToggleButton(
+        checked = checked,
+        onCheckedChange = { checked = !checked },
+        modifier = Modifier.touchTargetAwareSize(TextButtonDefaults.LargeButtonSize),
+    ) {
+        Text(
+            text = if (checked) "On" else "Off",
+            style = MaterialTheme.typography.labelLarge,
+        )
+    }
+}
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
index 281a003..4fa6054 100644
--- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/CardTest.kt
@@ -50,12 +50,12 @@
 import org.junit.Rule
 import org.junit.Test
 
-public class CardTest {
+class CardTest {
     @get:Rule
-    public val rule: ComposeContentTestRule = createComposeRule()
+    val rule: ComposeContentTestRule = createComposeRule()
 
     @Test
-    public fun supports_test_tag() {
+    fun supports_test_tag() {
         rule.setContentWithTheme {
             Card(
                 onClick = {},
@@ -69,7 +69,7 @@
     }
 
     @Test
-    public fun has_clickaction_when_enabled() {
+    fun has_clickaction_when_enabled() {
         rule.setContentWithTheme {
             Card(
                 onClick = {},
@@ -84,7 +84,7 @@
     }
 
     @Test
-    public fun has_clickaction_when_disabled() {
+    fun has_clickaction_when_disabled() {
         rule.setContentWithTheme {
             Card(
                 onClick = {},
@@ -99,7 +99,7 @@
     }
 
     @Test
-    public fun is_correctly_enabled_when_enabled_equals_true() {
+    fun is_correctly_enabled_when_enabled_equals_true() {
         rule.setContentWithTheme {
             Card(
                 onClick = {},
@@ -114,7 +114,7 @@
     }
 
     @Test
-    public fun is_correctly_disabled_when_enabled_equals_false() {
+    fun is_correctly_disabled_when_enabled_equals_false() {
         rule.setContentWithTheme {
             Card(
                 onClick = {},
@@ -129,7 +129,7 @@
     }
 
     @Test
-    public fun responds_to_click_when_enabled() {
+    fun responds_to_click_when_enabled() {
         var clicked = false
 
         rule.setContentWithTheme {
@@ -150,7 +150,7 @@
     }
 
     @Test
-    public fun does_not_respond_to_click_when_disabled() {
+    fun does_not_respond_to_click_when_disabled() {
         var clicked = false
 
         rule.setContentWithTheme {
@@ -171,7 +171,7 @@
     }
 
     @Test
-    public fun has_role_button_if_explicitly_set() {
+    fun has_role_button_if_explicitly_set() {
         rule.setContentWithTheme {
             Card(
                 onClick = {},
@@ -193,7 +193,17 @@
     }
 
     @Test
-    public fun gives_base_card_correct_default_max_height(): Unit =
+    fun gives_base_card_with_text_minimum_height(): Unit =
+        rule.verifyHeight(48.dp) {
+            Card(
+                onClick = {},
+            ) {
+                Text("Card")
+            }
+        }
+
+    @Test
+    fun gives_base_card_correct_default_max_height(): Unit =
         verifyHeight(
             expectedHeight = 100.dp +
                 CardDefaults.ContentPadding.calculateBottomPadding() +
@@ -202,19 +212,19 @@
         )
 
     @Test
-    public fun gives_enabled_default_colors(): Unit =
+    fun gives_enabled_default_colors(): Unit =
         verifyColors(
             CardStatus.Enabled,
         ) { MaterialTheme.colorScheme.onSurfaceVariant }
 
     @Test
-    public fun gives_disabled_default_colors(): Unit =
+    fun gives_disabled_default_colors(): Unit =
         verifyColors(
             CardStatus.Disabled,
         ) { MaterialTheme.colorScheme.onSurfaceVariant }
 
     @Test
-    public fun app_card_gives_default_colors() {
+    fun app_card_gives_default_colors() {
         var expectedAppColor = Color.Transparent
         var expectedTimeColor = Color.Transparent
         var expectedTitleColor = Color.Transparent
@@ -254,7 +264,7 @@
     }
 
     @Test
-    public fun title_card_gives_default_colors() {
+    fun title_card_gives_default_colors() {
         var expectedTimeColor = Color.Transparent
         var expectedTitleColor = Color.Transparent
         var expectedContentColor = Color.Transparent
@@ -290,7 +300,7 @@
 
     @RequiresApi(Build.VERSION_CODES.O)
     @Test
-    public fun outlined_card_has_outlined_border_and_transparent() {
+    fun outlined_card_has_outlined_border_and_transparent() {
         val outlineColor = Color.Red
         val testBackground = Color.Green
 
@@ -320,7 +330,7 @@
 
     @RequiresApi(Build.VERSION_CODES.O)
     @Test
-    public fun outlined_titlecard_has_outlined_border_and_transparent() {
+    fun outlined_titlecard_has_outlined_border_and_transparent() {
         val outlineColor = Color.Red
         val testBackground = Color.Green
 
@@ -352,7 +362,7 @@
 
     @RequiresApi(Build.VERSION_CODES.O)
     @Test
-    public fun outlined_appcard_has_outlined_border_and_transparent() {
+    fun outlined_appcard_has_outlined_border_and_transparent() {
         val outlineColor = Color.Red
         val testBackground = Color.Green
 
@@ -384,7 +394,7 @@
     }
 
     @Test
-    public fun gives_correct_text_style_base() {
+    fun gives_correct_text_style_base() {
         var actualTextStyle = TextStyle.Default
         var expectedTextStyle = TextStyle.Default
         rule.setContentWithTheme {
@@ -402,7 +412,7 @@
     }
 
     @Test
-    public fun app_card_gives_correct_text_style_base() {
+    fun app_card_gives_correct_text_style_base() {
         var actualAppTextStyle = TextStyle.Default
         var actualTimeTextStyle = TextStyle.Default
         var actualTitleTextStyle = TextStyle.Default
@@ -441,7 +451,7 @@
     }
 
     @Test
-    public fun title_card_gives_correct_text_style_base() {
+    fun title_card_gives_correct_text_style_base() {
         var actualTimeTextStyle = TextStyle.Default
         var actualTitleTextStyle = TextStyle.Default
         var actuaContentTextStyle = TextStyle.Default
@@ -474,7 +484,7 @@
 
     @RequiresApi(Build.VERSION_CODES.O)
     @Test
-    public fun outlined_app_card_gives_correct_text_style_base() {
+    fun outlined_app_card_gives_correct_text_style_base() {
         var actualAppTextStyle = TextStyle.Default
         var actualTimeTextStyle = TextStyle.Default
         var actualTitleTextStyle = TextStyle.Default
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ListHeaderScreenshotTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ListHeaderScreenshotTest.kt
new file mode 100644
index 0000000..6ae78d2
--- /dev/null
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ListHeaderScreenshotTest.kt
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.wear.compose.material3
+
+import android.os.Build
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.Home
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.screenshot.AndroidXScreenshotTestRule
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TestName
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+class ListHeaderScreenshotTest {
+    @get:Rule
+    val rule = createComposeRule()
+
+    @get:Rule
+    val screenshotRule = AndroidXScreenshotTestRule(SCREENSHOT_GOLDEN_PATH)
+
+    @get:Rule
+    val testName = TestName()
+
+    @Test
+    fun listheader() = rule.verifyScreenshot(
+        methodName = testName.methodName,
+        screenshotRule = screenshotRule
+    ) {
+        ListHeader(modifier = Modifier.testTag(TEST_TAG)) {
+            Text("Header")
+        }
+    }
+
+    @Test
+    fun listsubheader_textonly() = rule.verifyScreenshot(
+        methodName = testName.methodName,
+        screenshotRule = screenshotRule,
+    ) {
+        ListSubheader(modifier = Modifier.testTag(TEST_TAG)) {
+            Text("Subheader")
+        }
+    }
+
+    @Test
+    fun listsubheader_textonly_rtl() = rule.verifyScreenshot(
+        methodName = testName.methodName,
+        screenshotRule = screenshotRule,
+        layoutDirection = LayoutDirection.Rtl,
+    ) {
+        ListSubheader(modifier = Modifier.testTag(TEST_TAG)) {
+            Text("Subheader")
+        }
+    }
+
+    @Test
+    fun listsubheader_text_and_icon() = rule.verifyScreenshot(
+        methodName = testName.methodName,
+        screenshotRule = screenshotRule,
+        layoutDirection = LayoutDirection.Ltr,
+    ) {
+        ListSubheader(
+            modifier = Modifier.testTag(TEST_TAG),
+            label = { Text(text = "Subheader") },
+            icon = { Icon(imageVector = Icons.Outlined.Home, "home") }
+        )
+    }
+
+    @Test
+    fun listsubheader_text_and_icon_rtl() = rule.verifyScreenshot(
+        methodName = testName.methodName,
+        screenshotRule = screenshotRule,
+        layoutDirection = LayoutDirection.Rtl
+    ) {
+        ListSubheader(
+            modifier = Modifier.testTag(TEST_TAG),
+            label = { Text(text = "Subheader") },
+            icon = { Icon(imageVector = Icons.Outlined.Home, "home") }
+        )
+    }
+}
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ListHeaderTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ListHeaderTest.kt
index fd91772..c321004 100644
--- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ListHeaderTest.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/ListHeaderTest.kt
@@ -21,10 +21,12 @@
 import androidx.compose.ui.semantics.SemanticsProperties
 import androidx.compose.ui.test.SemanticsMatcher
 import androidx.compose.ui.test.assert
+import androidx.compose.ui.test.assertHeightIsAtLeast
 import androidx.compose.ui.test.junit4.ComposeContentTestRule
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import org.junit.Assert
@@ -83,7 +85,7 @@
         var expectedTextStyle = TextStyle.Default
 
         rule.setContentWithTheme {
-            expectedTextStyle = MaterialTheme.typography.labelMedium
+            expectedTextStyle = MaterialTheme.typography.titleMedium
             ListHeader {
                 actualTextStyle = LocalTextStyle.current
             }
@@ -93,12 +95,44 @@
     }
 
     @Test
+    fun listHeader_has_adjustable_height() {
+        val minHeight = ListHeaderDefaults.Height + 1.dp
+
+        rule.setContentWithThemeForSizeAssertions {
+            ListHeader(
+                modifier = Modifier.testTag(TEST_TAG)
+            ) {
+                Text("Header with multiple lines of text to exceed" +
+                    " the minimum height, should adjust"
+                )
+            }
+        }
+        .assertHeightIsAtLeast(minHeight)
+    }
+
+    @Test
+    fun listsubHeader_has_adjustable_height() {
+        val minHeight = ListHeaderDefaults.Height + 1.dp
+
+        rule.setContentWithThemeForSizeAssertions {
+            ListSubheader(
+                modifier = Modifier.testTag(TEST_TAG)
+            ) {
+                Text("Header with multiple lines of text to exceed" +
+                    " the minimum height, should adjust"
+                )
+            }
+        }
+        .assertHeightIsAtLeast(minHeight)
+    }
+
+    @Test
     fun gives_listSubheader_correct_text_style() {
         var actualTextStyle = TextStyle.Default
         var expectedTextStyle = TextStyle.Default
 
         rule.setContentWithTheme {
-            expectedTextStyle = MaterialTheme.typography.labelSmall
+            expectedTextStyle = MaterialTheme.typography.titleMedium
             ListSubheader {
                 actualTextStyle = LocalTextStyle.current
             }
diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
index 0db4cef..17695c0 100644
--- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
+++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
@@ -30,6 +30,7 @@
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.outlined.Add
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.testutils.assertAgainstGolden
 import androidx.compose.testutils.assertContainsColor
 import androidx.compose.ui.Alignment
@@ -40,6 +41,7 @@
 import androidx.compose.ui.graphics.compositeOver
 import androidx.compose.ui.graphics.toPixelMap
 import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.semantics.SemanticsNode
 import androidx.compose.ui.test.SemanticsNodeInteraction
@@ -52,6 +54,7 @@
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.DpRect
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.height
 import androidx.compose.ui.unit.isUnspecified
@@ -302,15 +305,18 @@
     methodName: String,
     screenshotRule: AndroidXScreenshotTestRule,
     testTag: String = TEST_TAG,
+    layoutDirection: LayoutDirection = LayoutDirection.Ltr,
     content: @Composable () -> Unit
 ) {
     setContentWithTheme {
-        Box(
-            modifier = Modifier
-                .fillMaxSize()
-                .background(MaterialTheme.colorScheme.background)
-        ) {
-            content()
+        CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {
+            Box(
+                modifier = Modifier
+                    .fillMaxSize()
+                    .background(MaterialTheme.colorScheme.background)
+            ) {
+                content()
+            }
         }
     }
 
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
index ab26846..13ed779 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Card.kt
@@ -89,7 +89,7 @@
 ) {
     androidx.wear.compose.materialcore.Card(
         onClick = onClick,
-        modifier = modifier,
+        modifier = modifier.minimumInteractiveComponentSize(),
         border = border,
         containerPainter = colors.containerPainter,
         enabled = enabled,
@@ -145,7 +145,7 @@
  *
  * @param onClick Will be called when the user clicks the card
  * @param appName A slot for displaying the application name, expected to be a single line of start
- * aligned text of [Typography.captionLarge]
+ * aligned text of [Typography.labelSmall]
  * @param title A slot for displaying the title of the card, expected to be one or two lines of
  * start aligned text of [Typography.titleSmall]
  * @param modifier Modifier to be applied to the card
@@ -166,7 +166,7 @@
  * @param appImage A slot for a small ([CardDefaults.AppImageSize]x[CardDefaults.AppImageSize] )
  * [Image] associated with the application.
  * @param time A slot for displaying the time relevant to the contents of the card, expected to be a
- * short piece of end aligned text of [Typography.captionLarge].
+ * short piece of end aligned text of [Typography.labelSmall].
  * @param content The main slot for a content of this card
  */
 @Composable
@@ -269,7 +269,7 @@
  *
  * @param onClick Will be called when the user clicks the card
  * @param title A slot for displaying the title of the card, expected to be one or two lines of text
- * of [Typography.buttonMedium]
+ * of [Typography.titleSmall]
  * @param modifier Modifier to be applied to the card
  * @param enabled Controls the enabled state of the card. When false, this card will not
  * be clickable and there will be no ripple effect on click. Wear cards do not have any specific
@@ -407,7 +407,7 @@
 /**
  * Contains the default values used by [Card]
  */
-public object CardDefaults {
+object CardDefaults {
 
     /**
      * Creates a [CardColors] that represents the default container and content colors used in a
@@ -420,7 +420,7 @@
      * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
      */
     @Composable
-    public fun cardColors(
+    fun cardColors(
         containerColor: Color = MaterialTheme.colorScheme.surface,
         contentColor: Color = MaterialTheme.colorScheme.onSurfaceVariant,
         appNameColor: Color = contentColor,
@@ -444,7 +444,7 @@
      * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
      */
     @Composable
-    public fun outlinedCardColors(
+    fun outlinedCardColors(
         contentColor: Color = MaterialTheme.colorScheme.onSurfaceVariant,
         appNameColor: Color = contentColor,
         timeColor: Color = contentColor,
@@ -468,7 +468,7 @@
      * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
      */
     @Composable
-    public fun imageCardColors(
+    fun imageCardColors(
         containerPainter: Painter,
         contentColor: Color = MaterialTheme.colorScheme.onBackground,
         appNameColor: Color = contentColor,
@@ -496,7 +496,7 @@
      * image to ensure that any text drawn over the image is legible
      */
     @Composable
-    public fun imageWithScrimBackgroundPainter(
+    fun imageWithScrimBackgroundPainter(
         backgroundImagePainter: Painter,
         backgroundImageScrimBrush: Brush = SolidColor(OverlayScrimColor)
     ): Painter {
@@ -512,7 +512,7 @@
      * @param borderWidth width of the border in [Dp].
      */
     @Composable
-    public fun outlinedCardBorder(
+    fun outlinedCardBorder(
         outlineColor: Color = MaterialTheme.colorScheme.outline,
         borderWidth: Dp = 1.dp
     ): BorderStroke =
@@ -526,7 +526,7 @@
     /**
      * The default content padding used by [Card]
      */
-    public val ContentPadding: PaddingValues = PaddingValues(
+    val ContentPadding: PaddingValues = PaddingValues(
         start = CardHorizontalPadding,
         top = CardVerticalPadding,
         end = CardHorizontalPadding,
@@ -536,7 +536,7 @@
     /**
      * The default size of the app icon/image when used inside a [AppCard].
      */
-    public val AppImageSize: Dp = 16.dp
+    val AppImageSize: Dp = 16.dp
 }
 
 /**
@@ -551,7 +551,7 @@
  * @param titleColor the color used for title, applies to [AppCard] and [TitleCard].
  */
 @Immutable
-public class CardColors(
+class CardColors(
     val containerPainter: Painter,
     val contentColor: Color,
     val appNameColor: Color,
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ListHeader.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ListHeader.kt
index 2c74ee6..121e610 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ListHeader.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/ListHeader.kt
@@ -17,12 +17,16 @@
 package androidx.wear.compose.material3
 
 import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.layout.IntrinsicSize
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.RowScope
 import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.defaultMinSize
+import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.width
@@ -62,8 +66,10 @@
     content: @Composable RowScope.() -> Unit
 ) {
     Row(
+        horizontalArrangement = Arrangement.Center,
         modifier = modifier
-            .height(48.dp)
+            .defaultMinSize(minHeight = ListHeaderDefaults.Height)
+            .height(IntrinsicSize.Min)
             .wrapContentSize()
             .background(backgroundColor)
             .padding(contentPadding)
@@ -71,7 +77,7 @@
     ) {
         CompositionLocalProvider(
             LocalContentColor provides contentColor,
-            LocalTextStyle provides MaterialTheme.typography.labelMedium,
+            LocalTextStyle provides MaterialTheme.typography.titleMedium,
         ) {
             content()
         }
@@ -110,21 +116,23 @@
 ) {
     Row(
         verticalAlignment = Alignment.CenterVertically,
+        horizontalArrangement = Arrangement.Start,
         modifier = modifier
-            .height(48.dp)
-            .wrapContentSize()
+            .defaultMinSize(minHeight = ListHeaderDefaults.Height)
+            .height(IntrinsicSize.Min)
+            .fillMaxWidth()
+            .wrapContentSize(align = Alignment.CenterStart)
             .background(backgroundColor)
             .padding(contentPadding)
             .semantics(mergeDescendants = true) { heading() }
     ) {
         CompositionLocalProvider(
             LocalContentColor provides contentColor,
-            LocalTextStyle provides MaterialTheme.typography.labelSmall,
+            LocalTextStyle provides MaterialTheme.typography.titleMedium,
         ) {
             if (icon != null) {
                 Box(
-                    modifier = Modifier
-                        .wrapContentSize(align = Alignment.CenterStart),
+                    modifier = Modifier.wrapContentSize(align = Alignment.CenterStart),
                     content = icon
                 )
                 Spacer(modifier = Modifier.width(6.dp))
@@ -135,21 +143,22 @@
 }
 
 object ListHeaderDefaults {
-    private val TOP_PADDING = 16.dp
-    private val SUBHEADER_BOTTOM_PADDING = 8.dp
-    private val HEADER_BOTTOM_PADDING = 12.dp
-    private val HORIZONTAL_PADDING = 14.dp
+    private val TopPadding = 16.dp
+    private val SubheaderBottomPadding = 8.dp
+    private val HeaderBottomPadding = 12.dp
+    private val HorizontalPadding = 14.dp
+    internal val Height = 48.dp
 
     val HeaderContentPadding = PaddingValues(
-        HORIZONTAL_PADDING,
-        TOP_PADDING,
-        HORIZONTAL_PADDING,
-        HEADER_BOTTOM_PADDING
+        HorizontalPadding,
+        TopPadding,
+        HorizontalPadding,
+        HeaderBottomPadding
     )
     val SubheaderContentPadding = PaddingValues(
-        HORIZONTAL_PADDING,
-        TOP_PADDING,
-        HORIZONTAL_PADDING,
-        SUBHEADER_BOTTOM_PADDING
+        HorizontalPadding,
+        TopPadding,
+        HorizontalPadding,
+        SubheaderBottomPadding
     )
 }
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/SelectionControls.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/SelectionControls.kt
index c7bf76b..a3ef21c 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/SelectionControls.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/SelectionControls.kt
@@ -491,13 +491,9 @@
         checkedCheckmarkColor = checkedCheckmarkColor,
         uncheckedBoxColor = uncheckedBoxColor,
         uncheckedCheckmarkColor = uncheckedCheckmarkColor,
-        disabledCheckedBoxColor = checkedBoxColor.toDisabledColor(
-            disabledAlpha = DisabledContainerAlpha
-        ),
+        disabledCheckedBoxColor = checkedBoxColor.toDisabledColor(),
         disabledCheckedCheckmarkColor = checkedCheckmarkColor.toDisabledColor(),
-        disabledUncheckedBoxColor = uncheckedBoxColor.toDisabledColor(
-            disabledAlpha = DisabledContainerAlpha
-        ),
+        disabledUncheckedBoxColor = uncheckedBoxColor.toDisabledColor(),
         disabledUncheckedCheckmarkColor = uncheckedCheckmarkColor.toDisabledColor()
     )
 }
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TextButton.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TextButton.kt
index 6bc0125..c63bf36 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TextButton.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TextButton.kt
@@ -36,10 +36,11 @@
  * no border. It offers a single slot for text.
  *
  * Set the size of the [TextButton] with [Modifier.touchTargetAwareSize]
- * to ensure that the recommended minimum touch target size is available.
- *
- * The recommended [TextButton] sizes are [TextButtonDefaults.DefaultButtonSize],
+ * to ensure that the recommended minimum touch target size is available. The recommended
+ * [TextButton] sizes are [TextButtonDefaults.DefaultButtonSize],
  * [TextButtonDefaults.LargeButtonSize] and [TextButtonDefaults.SmallButtonSize].
+ * [TextButton] uses [Typography.labelMedium] by default and this should be
+ * overridden to [Typography.labelLarge] when using [TextButtonDefaults.LargeButtonSize].
  *
  * The default [TextButton] has no border and a transparent background for low emphasis actions.
  * For actions that require high emphasis, set [colors] to
@@ -51,11 +52,14 @@
  *
  * [TextButton] can be enabled or disabled. A disabled button will not respond to click events.
  *
- * TODO(b/261838497) Add Material3 samples and UX guidance links
+ * TODO(b/261838497) Add Material3 UX guidance links
  *
  * Example of a [TextButton]:
  * @sample androidx.wear.compose.material3.samples.TextButtonSample
  *
+ * Example of a large, filled tonal [TextButton]:
+ * @sample androidx.wear.compose.material3.samples.LargeFilledTonalTextButtonSample
+ *
  * @param onClick Will be called when the user clicks the button.
  * @param modifier Modifier to be applied to the button.
  * @param enabled Controls the enabled state of the button. When `false`, this button will not
@@ -107,15 +111,20 @@
  *
  * Set the size of the [TextToggleButton] with Modifier.[touchTargetAwareSize]
  * to ensure that the background padding will correctly reach the edge of the minimum touch target.
- * The recommended text button sizes are [TextButtonDefaults.DefaultButtonSize],
+ * The recommended [TextToggleButton] sizes are [TextButtonDefaults.DefaultButtonSize],
  * [TextButtonDefaults.LargeButtonSize] and [TextButtonDefaults.SmallButtonSize].
+ * [TextToggleButton] uses [Typography.labelMedium] by default and this should be overridden to
+ * [Typography.labelLarge] when using [TextButtonDefaults.LargeButtonSize].
  *
  * [TextToggleButton] can be enabled or disabled. A disabled button will not respond to
  * click events. When enabled, the checked and unchecked events are propagated by [onCheckedChange].
  *
- * A simple text toggle button using the default colors
+ * A simple text toggle button using the default colors:
  * @sample androidx.wear.compose.material3.samples.TextToggleButtonSample
  *
+ * Example of a large text toggle button:
+ * @sample androidx.wear.compose.material3.samples.LargeTextToggleButtonSample
+ *
  * @param checked Boolean flag indicating whether this toggle button is currently checked.
  * @param onCheckedChange Callback to be invoked when this toggle button is clicked.
  * @param modifier Modifier to be applied to the toggle button.
@@ -316,8 +325,9 @@
     }
 
     /**
-     * The recommended size for a small button.
-     * It is recommended to apply this size using [Modifier.touchTargetAwareSize].
+     * The recommended size for a small button - for this size, it is recommended to set
+     * the text style to [Typography.labelMedium]. It is recommended to apply this size
+     * using [Modifier.touchTargetAwareSize].
      */
     val SmallButtonSize = 48.dp
 
@@ -348,7 +358,7 @@
  * @param disabledContentColor the content color of this text button when not enabled.
  */
 @Immutable
-class TextButtonColors constructor(
+class TextButtonColors(
     val containerColor: Color,
     val contentColor: Color,
     val disabledContainerColor: Color,
diff --git a/wear/compose/integration-tests/demos/build.gradle b/wear/compose/integration-tests/demos/build.gradle
index c027722..7fe817a 100644
--- a/wear/compose/integration-tests/demos/build.gradle
+++ b/wear/compose/integration-tests/demos/build.gradle
@@ -26,8 +26,8 @@
         applicationId "androidx.wear.compose.integration.demos"
         minSdk 25
         targetSdk 30
-        versionCode 16
-        versionName "1.16"
+        versionCode 18
+        versionName "1.18"
     }
 
     buildTypes {
diff --git a/wear/compose/integration-tests/demos/lint-baseline.xml b/wear/compose/integration-tests/demos/lint-baseline.xml
index f9c7dbf..6c6339d 100644
--- a/wear/compose/integration-tests/demos/lint-baseline.xml
+++ b/wear/compose/integration-tests/demos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="WearStandaloneAppFlag"
diff --git a/wear/compose/integration-tests/macrobenchmark-target/lint-baseline.xml b/wear/compose/integration-tests/macrobenchmark-target/lint-baseline.xml
index fb6ce31..8d5f8b9 100644
--- a/wear/compose/integration-tests/macrobenchmark-target/lint-baseline.xml
+++ b/wear/compose/integration-tests/macrobenchmark-target/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
diff --git a/wear/protolayout/protolayout-material-core/src/main/java/androidx/wear/protolayout/materialcore/Chip.java b/wear/protolayout/protolayout-material-core/src/main/java/androidx/wear/protolayout/materialcore/Chip.java
new file mode 100644
index 0000000..ccb971d
--- /dev/null
+++ b/wear/protolayout/protolayout-material-core/src/main/java/androidx/wear/protolayout/materialcore/Chip.java
@@ -0,0 +1,562 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.wear.protolayout.materialcore;
+
+import static androidx.wear.protolayout.ColorBuilders.argb;
+import static androidx.wear.protolayout.DimensionBuilders.dp;
+import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_START;
+import static androidx.wear.protolayout.materialcore.Helper.checkNotNull;
+import static androidx.wear.protolayout.materialcore.Helper.checkTag;
+import static androidx.wear.protolayout.materialcore.Helper.getMetadataTagName;
+import static androidx.wear.protolayout.materialcore.Helper.getTagBytes;
+import static androidx.wear.protolayout.materialcore.Helper.radiusOf;
+
+import static java.lang.Math.max;
+
+import android.annotation.SuppressLint;
+import android.graphics.Color;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.RestrictTo.Scope;
+import androidx.wear.protolayout.ColorBuilders.ColorProp;
+import androidx.wear.protolayout.DimensionBuilders.ContainerDimension;
+import androidx.wear.protolayout.DimensionBuilders.DpProp;
+import androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp;
+import androidx.wear.protolayout.LayoutElementBuilders;
+import androidx.wear.protolayout.LayoutElementBuilders.Box;
+import androidx.wear.protolayout.LayoutElementBuilders.Column;
+import androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignment;
+import androidx.wear.protolayout.LayoutElementBuilders.LayoutElement;
+import androidx.wear.protolayout.LayoutElementBuilders.Row;
+import androidx.wear.protolayout.LayoutElementBuilders.Spacer;
+import androidx.wear.protolayout.ModifiersBuilders.Background;
+import androidx.wear.protolayout.ModifiersBuilders.Clickable;
+import androidx.wear.protolayout.ModifiersBuilders.Corner;
+import androidx.wear.protolayout.ModifiersBuilders.ElementMetadata;
+import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
+import androidx.wear.protolayout.ModifiersBuilders.Padding;
+import androidx.wear.protolayout.ModifiersBuilders.Semantics;
+import androidx.wear.protolayout.TypeBuilders.StringProp;
+import androidx.wear.protolayout.expression.Fingerprint;
+import androidx.wear.protolayout.proto.LayoutElementProto;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * ProtoLayout core component {@link Chip} that represents clickable object with the text, optional
+ * label and optional icon or with custom content. This component is not meant to be used
+ * standalone, it's a helper component for the Material library.
+ *
+ * <p>The Chip is Stadium shape object. The recommended sizes and styles are defined in the public
+ * Material library.
+ *
+ * <p>This Button doesn't have any styling applied, that should be done by the calling library.
+ *
+ * <p>When accessing the contents of a container for testing, note that this element can't be simply
+ * casted back to the original type, i.e.:
+ *
+ * <pre>{@code
+ * Chip chip = new Chip...
+ * Box box = new Box.Builder().addContent(chip).build();
+ *
+ * Chip myChip = (Chip) box.getContents().get(0);
+ * }</pre>
+ *
+ * will fail.
+ *
+ * <p>To be able to get {@link Chip} object from any layout element, {@link #fromLayoutElement}
+ * method should be used, i.e.:
+ *
+ * <pre>{@code
+ * Chip myChip = Chip.fromLayoutElement(box.getContents().get(0));
+ * }</pre>
+ */
+public class Chip implements LayoutElement {
+    /**
+     * Tool tag for Metadata in Modifiers, so we know that Box is actually a Chip with only text.
+     */
+    public static final String METADATA_TAG_TEXT = "TXTCHP";
+
+    /** Tool tag for Metadata in Modifiers, so we know that Box is actually a Chip with icon. */
+    public static final String METADATA_TAG_ICON = "ICNCHP";
+
+    /**
+     * Tool tag for Metadata in Modifiers, so we know that Box is actually a Chip with custom
+     * content.
+     */
+    public static final String METADATA_TAG_CUSTOM_CONTENT = "CSTCHP";
+
+    private static final int PRIMARY_LABEL_INDEX = 0;
+    private static final int SECONDARY_LABEL_INDEX = 1;
+    private static final int LABELS_INDEX_NO_ICON = 0;
+    private static final int LABELS_INDEX_ICON = 2;
+
+    /** Outer tappable Box. */
+    @NonNull private final Box mImpl;
+
+    /** Inner visible Box with all Chip elements. */
+    @NonNull private final Box mElement;
+
+    Chip(@NonNull Box impl) {
+        mImpl = impl;
+        mElement = (Box) impl.getContents().get(0);
+    }
+
+    /** Builder class for {@link Chip}. */
+    public static final class Builder implements LayoutElement.Builder {
+        /** Chip type that has no inner set. */
+        public static final int NOT_SET = 0;
+
+        /** Chip type to be used when setting a content which has a text. */
+        public static final int TEXT = 1;
+
+        /** Chip type to be used when setting a content which has an icon. */
+        public static final int ICON = 2;
+
+        /** Chip type to be used when setting a content which is a custom one. */
+        public static final int CUSTOM_CONTENT = 3;
+
+        /** Chip types. */
+        @RestrictTo(Scope.LIBRARY_GROUP)
+        @Retention(RetentionPolicy.SOURCE)
+        @IntDef({NOT_SET, TEXT, ICON, CUSTOM_CONTENT})
+        public @interface ChipType {}
+
+        @Nullable private LayoutElement mCustomContent;
+        @Nullable private LayoutElement mIconContent = null;
+        @Nullable private LayoutElement mPrimaryLabelContent = null;
+        @Nullable private LayoutElement mSecondaryLabelContent = null;
+        @NonNull private final Clickable mClickable;
+        @Nullable private StringProp mContentDescription = null;
+        @NonNull private ContainerDimension mWidth = dp(0);
+        @NonNull private DpProp mHeight = dp(0);
+        @NonNull private ColorProp mBackgroundColor = argb(Color.BLACK);
+        @HorizontalAlignment private int mHorizontalAlign = HORIZONTAL_ALIGN_START;
+        @NonNull private DpProp mHorizontalPadding = dp(0);
+        @NonNull private DpProp mIconSpacerWidth = dp(0);
+        @NonNull private DpProp mMinTappableSquareLength = dp(0);
+
+        @NonNull static final Map<Integer, String> TYPE_TO_TAG = new HashMap<>();
+
+        static {
+            TYPE_TO_TAG.put(ICON, METADATA_TAG_ICON);
+            TYPE_TO_TAG.put(TEXT, METADATA_TAG_TEXT);
+            TYPE_TO_TAG.put(CUSTOM_CONTENT, METADATA_TAG_CUSTOM_CONTENT);
+        }
+
+        /**
+         * Creates a builder for the {@link Chip} with associated action. It is required to add
+         * content later with setters.
+         *
+         * @param clickable Associated {@link Clickable} for click events. When the Chip is clicked
+         *     it will fire the associated action.
+         */
+        public Builder(@NonNull Clickable clickable) {
+            mClickable = clickable;
+        }
+
+        /** Sets the width of {@link Chip}. If not set, Chip won't be shown. */
+        @NonNull
+        public Builder setWidth(@NonNull ContainerDimension width) {
+            mWidth = width;
+            return this;
+        }
+
+        /** Sets the height of {@link Chip}. If not set, Chip won't be shown. */
+        @NonNull
+        public Builder setHeight(@NonNull DpProp height) {
+            mHeight = height;
+            return this;
+        }
+
+        /**
+         * Sets the custom content for the {@link Chip}. Any previously added content will be
+         * overridden. Provided content should be styled and sized.
+         */
+        @NonNull
+        public Builder setCustomContent(@NonNull LayoutElement content) {
+            this.mCustomContent = content;
+            this.mPrimaryLabelContent = null;
+            this.mSecondaryLabelContent = null;
+            this.mIconContent = null;
+            return this;
+        }
+
+        /** Sets the background colors for the {@link Button}. If not set, black is used. */
+        @NonNull
+        public Builder setBackgroundColor(@NonNull ColorProp backgroundColor) {
+            mBackgroundColor = backgroundColor;
+            return this;
+        }
+
+        /**
+         * Sets the content description for the {@link Chip}. It is highly recommended to provide
+         * this for chip containing icon.
+         *
+         * <p>While this field is statically accessible from 1.0, it's only bindable since version
+         * 1.2 and renderers supporting version 1.2 will use the dynamic value (if set).
+         */
+        @NonNull
+        public Builder setContentDescription(@NonNull StringProp contentDescription) {
+            this.mContentDescription = contentDescription;
+            return this;
+        }
+
+        /**
+         * Sets the primary label for the {@link Chip}. Any previously added custom content will be
+         * overridden. This should be styled and sized by the caller.
+         */
+        @NonNull
+        public Builder setPrimaryLabelContent(@NonNull LayoutElement primaryLabel) {
+            this.mPrimaryLabelContent = primaryLabel;
+            this.mCustomContent = null;
+            return this;
+        }
+
+        /**
+         * Sets the secondary label for the {@link Chip}. Any previously added custom content will
+         * be overridden. If secondary label is set, primary label must be set too with {@link
+         * #setPrimaryLabelContent}. This should be styled and sized by the caller.
+         */
+        @NonNull
+        public Builder setSecondaryLabelContent(@NonNull LayoutElement secondaryLabel) {
+            this.mSecondaryLabelContent = secondaryLabel;
+            this.mCustomContent = null;
+            return this;
+        }
+
+        /**
+         * Sets the icon for the {@link Chip}. Any previously added custom content will be
+         * overridden. If icon is set, primary label must be set too with {@link
+         * #setPrimaryLabelContent}. This should be styled and sized by the caller.
+         */
+        @NonNull
+        public Builder setIconContent(@NonNull LayoutElement imageResourceId) {
+            this.mIconContent = imageResourceId;
+            this.mCustomContent = null;
+            return this;
+        }
+
+        /**
+         * Sets the horizontal alignment in the chip. If not set, {@link
+         * HorizontalAlignment#HORIZONTAL_ALIGN_START} will be used.
+         */
+        @NonNull
+        public Builder setHorizontalAlignment(@HorizontalAlignment int horizontalAlignment) {
+            mHorizontalAlign = horizontalAlignment;
+            return this;
+        }
+
+        /** Sets the width of spacer used next to the icon if set. */
+        @NonNull
+        public Builder setIconSpacerWidth(@NonNull DpProp iconSpacerWidth) {
+            mIconSpacerWidth = iconSpacerWidth;
+            return this;
+        }
+
+        /** Sets the length of minimal tappable square for this chip. */
+        @NonNull
+        public Builder setMinimalTappableSquareLength(@NonNull DpProp tappableLength) {
+            mMinTappableSquareLength = tappableLength;
+            return this;
+        }
+
+        /** Sets the horizontal padding in the chip. */
+        @NonNull
+        public Builder setHorizontalPadding(@NonNull DpProp horizontalPadding) {
+            this.mHorizontalPadding = horizontalPadding;
+            return this;
+        }
+
+        /** Constructs and returns {@link Chip} with the provided content and look. */
+        @NonNull
+        @Override
+        public Chip build() {
+            Modifiers.Builder modifiers =
+                    new Modifiers.Builder()
+                            .setPadding(
+                                    new Padding.Builder()
+                                            .setStart(mHorizontalPadding)
+                                            .setEnd(mHorizontalPadding)
+                                            .build())
+                            .setBackground(
+                                    new Background.Builder()
+                                            .setColor(mBackgroundColor)
+                                            .setCorner(
+                                                    new Corner.Builder()
+                                                            .setRadius(radiusOf(mHeight))
+                                                            .build())
+                                            .build());
+
+            Box.Builder visible =
+                    new Box.Builder()
+                            .setHeight(mHeight)
+                            .setWidth(mWidth)
+                            .setHorizontalAlignment(mHorizontalAlign)
+                            .addContent(getCorrectContent())
+                            .setModifiers(modifiers.build());
+
+            Box tappable =
+                    new Box.Builder()
+                            .setWidth(resolveMinTappableWidth())
+                            .setHeight(dp(resolveMinTappableHeight()))
+                            .setModifiers(
+                                    new Modifiers.Builder()
+                                            .setClickable(mClickable)
+                                            .setMetadata(getCorrectMetadataTag())
+                                            .setSemantics(
+                                                    new Semantics.Builder()
+                                                            .setContentDescription(
+                                                                    getCorrectContentDescription())
+                                                            .build())
+                                            .build())
+                            .addContent(visible.build())
+                            .build();
+
+            return new Chip(tappable);
+        }
+
+        private ContainerDimension resolveMinTappableWidth() {
+            if (mWidth instanceof DpProp) {
+                return dp(max(((DpProp) mWidth).getValue(), mMinTappableSquareLength.getValue()));
+            } else if (mWidth instanceof WrappedDimensionProp) {
+                return new WrappedDimensionProp.Builder()
+                        .setMinimumSize(mMinTappableSquareLength)
+                        .build();
+            } else {
+                return mWidth;
+            }
+        }
+
+        private float resolveMinTappableHeight() {
+            return max(mHeight.getValue(), mMinTappableSquareLength.getValue());
+        }
+
+        @NonNull
+        private StringProp getCorrectContentDescription() {
+            if (mContentDescription == null) {
+                String staticValue = "";
+                if (mPrimaryLabelContent != null) {
+                    staticValue += mPrimaryLabelContent;
+                }
+                if (mSecondaryLabelContent != null) {
+                    staticValue += "\n" + mSecondaryLabelContent;
+                }
+                mContentDescription = new StringProp.Builder(staticValue).build();
+            }
+            return checkNotNull(mContentDescription);
+        }
+
+        private ElementMetadata getCorrectMetadataTag() {
+            String tag = METADATA_TAG_TEXT;
+            if (mCustomContent != null) {
+                tag = METADATA_TAG_CUSTOM_CONTENT;
+            } else if (mIconContent != null) {
+                tag = METADATA_TAG_ICON;
+            }
+            return new ElementMetadata.Builder().setTagData(getTagBytes(tag)).build();
+        }
+
+        @SuppressLint("CheckResult") // (b/247804720)
+        @NonNull
+        private LayoutElement getCorrectContent() {
+            if (mCustomContent != null) {
+                return mCustomContent;
+            }
+
+            Column.Builder column =
+                    new Column.Builder()
+                            .setHorizontalAlignment(HORIZONTAL_ALIGN_START)
+                            .addContent(putLayoutInBox(checkNotNull(mPrimaryLabelContent)).build());
+
+            if (mSecondaryLabelContent != null) {
+                column.addContent(putLayoutInBox(mSecondaryLabelContent).build());
+            }
+
+            Box labels = putLayoutInBox(column.build()).build();
+            if (mIconContent == null) {
+                return labels;
+            } else {
+                return new Row.Builder()
+                        .addContent(mIconContent)
+                        .addContent(
+                                new Spacer.Builder()
+                                        .setHeight(mHeight)
+                                        .setWidth(mIconSpacerWidth)
+                                        .build())
+                        .addContent(labels)
+                        .setVerticalAlignment(LayoutElementBuilders.VERTICAL_ALIGN_CENTER)
+                        .build();
+            }
+        }
+
+        private Box.Builder putLayoutInBox(@NonNull LayoutElement element) {
+            // Wrapped and centered content are default.
+            return new Box.Builder().addContent(element);
+        }
+    }
+
+    /** Returns the visible height of this Chip. */
+    @NonNull
+    public ContainerDimension getHeight() {
+        return checkNotNull(mElement.getHeight());
+    }
+
+    /** Returns width of this Chip. */
+    @NonNull
+    public ContainerDimension getWidth() {
+        return checkNotNull(mElement.getWidth());
+    }
+
+    /** Returns click event action associated with this Chip. */
+    @NonNull
+    public Clickable getClickable() {
+        return checkNotNull(checkNotNull(mImpl.getModifiers()).getClickable());
+    }
+
+    /** Returns background color of this Chip. */
+    @NonNull
+    public ColorProp getBackgroundColor() {
+        return checkNotNull(
+                checkNotNull(checkNotNull(mElement.getModifiers()).getBackground()).getColor());
+    }
+
+    /** Returns content description of this Chip. */
+    @Nullable
+    public StringProp getContentDescription() {
+        Semantics semantics = checkNotNull(mImpl.getModifiers()).getSemantics();
+        if (semantics == null) {
+            return null;
+        }
+        return semantics.getContentDescription();
+    }
+
+    /** Returns custom content from this Chip if it has been added. Otherwise, it returns null. */
+    @Nullable
+    public LayoutElement getCustomContent() {
+        if (getMetadataTag().equals(METADATA_TAG_CUSTOM_CONTENT)) {
+            return checkNotNull(checkNotNull(mElement.getContents()).get(0));
+        }
+        return null;
+    }
+
+    /** Returns primary label from this Chip if it has been added. Otherwise, it returns null. */
+    @Nullable
+    public LayoutElement getPrimaryLabelContent() {
+        return getPrimaryOrSecondaryLabelContent(PRIMARY_LABEL_INDEX);
+    }
+
+    /** Returns secondary label from this Chip if it has been added. Otherwise, it returns null. */
+    @Nullable
+    public LayoutElement getSecondaryLabelContent() {
+        return getPrimaryOrSecondaryLabelContent(SECONDARY_LABEL_INDEX);
+    }
+
+    /** Returns icon id from this Chip if it has been added. Otherwise, it returns null. */
+    @Nullable
+    public LayoutElement getIconContent() {
+        if (!getMetadataTag().equals(METADATA_TAG_ICON)) {
+            return null;
+        }
+        return ((Row) mElement.getContents().get(0)).getContents().get(0);
+    }
+
+    @Nullable
+    private LayoutElement getPrimaryOrSecondaryLabelContent(int index) {
+        String metadataTag = getMetadataTag();
+        if (metadataTag.equals(METADATA_TAG_CUSTOM_CONTENT)) {
+            return null;
+        }
+
+        // In any other case, text (either primary or primary + label) must be present.
+        Column content;
+        if (metadataTag.equals(METADATA_TAG_ICON)) {
+            content =
+                    (Column)
+                            ((Box)
+                                            ((Row) mElement.getContents().get(0))
+                                                    .getContents()
+                                                    .get(LABELS_INDEX_ICON))
+                                    .getContents()
+                                    .get(0);
+        } else {
+            content =
+                    (Column)
+                            ((Box) mElement.getContents().get(0))
+                                    .getContents()
+                                    .get(LABELS_INDEX_NO_ICON);
+        }
+
+        // We need to check this as this can be the case when we called for label, which doesn't
+        // exist.
+        return index < content.getContents().size()
+                ? ((Box) content.getContents().get(index)).getContents().get(0)
+                : null;
+    }
+
+    /** Returns the horizontal alignment of the content in this Chip. */
+    @HorizontalAlignment
+    public int getHorizontalAlignment() {
+        return checkNotNull(mElement.getHorizontalAlignment()).getValue();
+    }
+
+    /** Returns metadata tag set to this Chip. */
+    @NonNull
+    public String getMetadataTag() {
+        return getMetadataTagName(checkNotNull(checkNotNull(mImpl.getModifiers()).getMetadata()));
+    }
+
+    /**
+     * Returns Chip object from the given LayoutElement (e.g. one retrieved from a container's
+     * content with {@code container.getContents().get(index)}) if that element can be converted to
+     * Chip. Otherwise, it will return null.
+     */
+    @Nullable
+    public static Chip fromLayoutElement(@NonNull LayoutElement element) {
+        if (element instanceof Chip) {
+            return (Chip) element;
+        }
+        if (!(element instanceof Box)) {
+            return null;
+        }
+        Box boxElement = (Box) element;
+        if (!checkTag(boxElement.getModifiers(), Builder.TYPE_TO_TAG.values())) {
+            return null;
+        }
+        // Now we are sure that this element is a Chip.
+        return new Chip(boxElement);
+    }
+
+    @NonNull
+    @Override
+    @RestrictTo(Scope.LIBRARY_GROUP)
+    public LayoutElementProto.LayoutElement toLayoutElementProto() {
+        return mImpl.toLayoutElementProto();
+    }
+
+    @Nullable
+    @Override
+    public Fingerprint getFingerprint() {
+        return mImpl.getFingerprint();
+    }
+}
diff --git a/wear/protolayout/protolayout-material-core/src/test/java/androidx/wear/protolayout/materialcore/ChipTest.java b/wear/protolayout/protolayout-material-core/src/test/java/androidx/wear/protolayout/materialcore/ChipTest.java
new file mode 100644
index 0000000..1bdd33f
--- /dev/null
+++ b/wear/protolayout/protolayout-material-core/src/test/java/androidx/wear/protolayout/materialcore/ChipTest.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.wear.protolayout.materialcore;
+
+import static androidx.wear.protolayout.ColorBuilders.argb;
+import static androidx.wear.protolayout.DimensionBuilders.dp;
+import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_CENTER;
+import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_START;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import android.graphics.Color;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.wear.protolayout.ActionBuilders.LaunchAction;
+import androidx.wear.protolayout.LayoutElementBuilders.Box;
+import androidx.wear.protolayout.LayoutElementBuilders.Column;
+import androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignment;
+import androidx.wear.protolayout.LayoutElementBuilders.LayoutElement;
+import androidx.wear.protolayout.ModifiersBuilders.Clickable;
+import androidx.wear.protolayout.ModifiersBuilders.ElementMetadata;
+import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
+import androidx.wear.protolayout.TypeBuilders.StringProp;
+import androidx.wear.protolayout.expression.DynamicBuilders.DynamicString;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.internal.DoNotInstrument;
+
+@RunWith(AndroidJUnit4.class)
+@DoNotInstrument
+public class ChipTest {
+    private static final Box PRIMARY_LABEL = new Box.Builder().build();
+    private static final Box SECONDARY_LABEL = new Box.Builder().build();
+    private static final Box ICON = new Box.Builder().build();
+    private static final Box CUSTOM_CONTENT = new Box.Builder().build();
+    private static final String CONTENT_DESCRIPTION = "Content description";
+    private static final Clickable CLICKABLE =
+            new Clickable.Builder()
+                    .setOnClick(new LaunchAction.Builder().build())
+                    .setId("action_id")
+                    .build();
+    private static final float WIDTH_DP = 300;
+    private static final float HEIGHT_DP = 300;
+    @ColorInt private static final int BACKGROUND_COLOR = Color.YELLOW;
+
+    @Test
+    public void testChip() {
+        StringProp contentDescription = staticString("Chip");
+        Chip chip =
+                new Chip.Builder(CLICKABLE)
+                        .setWidth(dp(WIDTH_DP))
+                        .setHeight(dp(HEIGHT_DP))
+                        .setPrimaryLabelContent(PRIMARY_LABEL)
+                        .setHorizontalAlignment(HORIZONTAL_ALIGN_CENTER)
+                        .setContentDescription(contentDescription)
+                        .build();
+        assertChip(
+                chip,
+                HORIZONTAL_ALIGN_CENTER,
+                Color.BLACK,
+                contentDescription,
+                Chip.METADATA_TAG_TEXT,
+                PRIMARY_LABEL,
+                null,
+                null,
+                null);
+    }
+
+    @Test
+    public void testFullWithColors() {
+        Chip chip =
+                new Chip.Builder(CLICKABLE)
+                        .setWidth(dp(WIDTH_DP))
+                        .setHeight(dp(HEIGHT_DP))
+                        .setBackgroundColor(argb(BACKGROUND_COLOR))
+                        .setContentDescription(staticString(CONTENT_DESCRIPTION))
+                        .setPrimaryLabelContent(PRIMARY_LABEL)
+                        .setSecondaryLabelContent(SECONDARY_LABEL)
+                        .setIconContent(ICON)
+                        .build();
+
+        assertChip(
+                chip,
+                HORIZONTAL_ALIGN_START,
+                BACKGROUND_COLOR,
+                staticString(CONTENT_DESCRIPTION),
+                Chip.METADATA_TAG_ICON,
+                PRIMARY_LABEL,
+                SECONDARY_LABEL,
+                ICON,
+                null);
+    }
+
+    @Test
+    public void testChipLeftAligned() {
+        Chip chip =
+                new Chip.Builder(CLICKABLE)
+                        .setWidth(dp(WIDTH_DP))
+                        .setHeight(dp(HEIGHT_DP))
+                        .setBackgroundColor(argb(BACKGROUND_COLOR))
+                        .setHorizontalAlignment(HORIZONTAL_ALIGN_START)
+                        .setPrimaryLabelContent(PRIMARY_LABEL)
+                        .setContentDescription(staticString(CONTENT_DESCRIPTION))
+                        .build();
+        assertChip(
+                chip,
+                HORIZONTAL_ALIGN_START,
+                BACKGROUND_COLOR,
+                staticString(CONTENT_DESCRIPTION),
+                Chip.METADATA_TAG_TEXT,
+                PRIMARY_LABEL,
+                null,
+                null,
+                null);
+    }
+
+    @Test
+    public void testChipCustomContentRightAlign() {
+        StringProp contentDescription = staticString("Custom chip");
+        Chip chip =
+                new Chip.Builder(CLICKABLE)
+                        .setWidth(dp(WIDTH_DP))
+                        .setHeight(dp(HEIGHT_DP))
+                        .setBackgroundColor(argb(BACKGROUND_COLOR))
+                        .setCustomContent(CUSTOM_CONTENT)
+                        .setHorizontalAlignment(HORIZONTAL_ALIGN_CENTER)
+                        .setContentDescription(contentDescription)
+                        .build();
+
+        assertChip(
+                chip,
+                HORIZONTAL_ALIGN_CENTER,
+                BACKGROUND_COLOR,
+                contentDescription,
+                Chip.METADATA_TAG_CUSTOM_CONTENT,
+                null,
+                null,
+                null,
+                CUSTOM_CONTENT);
+    }
+
+    private void assertChip(
+            @NonNull Chip actualChip,
+            @HorizontalAlignment int hAlign,
+            @ColorInt int expectedBackgroundColor,
+            @Nullable StringProp expectedContDesc,
+            @NonNull String expectedMetadata,
+            @Nullable LayoutElement expectedPrimaryText,
+            @Nullable LayoutElement expectedLabel,
+            @Nullable LayoutElement expectedIcon,
+            @Nullable LayoutElement expectedCustomContent) {
+        assertChipIsEqual(
+                actualChip,
+                hAlign,
+                expectedBackgroundColor,
+                expectedContDesc,
+                expectedMetadata,
+                expectedPrimaryText,
+                expectedLabel,
+                expectedIcon,
+                expectedCustomContent);
+
+        assertFromLayoutElementChipIsEqual(
+                actualChip,
+                hAlign,
+                expectedBackgroundColor,
+                expectedContDesc,
+                expectedMetadata,
+                expectedPrimaryText,
+                expectedLabel,
+                expectedIcon,
+                expectedCustomContent);
+
+        assertThat(Chip.fromLayoutElement(actualChip)).isEqualTo(actualChip);
+    }
+
+    @Test
+    public void testWrongElement() {
+        Column box = new Column.Builder().build();
+
+        assertThat(Chip.fromLayoutElement(box)).isNull();
+    }
+
+    @Test
+    public void testWrongBox() {
+        Box box = new Box.Builder().build();
+
+        assertThat(Chip.fromLayoutElement(box)).isNull();
+    }
+
+    @Test
+    public void testWrongTag() {
+        Box box =
+                new Box.Builder()
+                        .setModifiers(
+                                new Modifiers.Builder()
+                                        .setMetadata(
+                                                new ElementMetadata.Builder()
+                                                        .setTagData("test".getBytes(UTF_8))
+                                                        .build())
+                                        .build())
+                        .build();
+
+        assertThat(Chip.fromLayoutElement(box)).isNull();
+    }
+
+    @Test
+    public void testDynamicContentDescription() {
+        StringProp dynamicContentDescription =
+                new StringProp.Builder("static")
+                        .setDynamicValue(DynamicString.constant("dynamic"))
+                        .build();
+        Chip chip =
+                new Chip.Builder(CLICKABLE)
+                        .setWidth(dp(WIDTH_DP))
+                        .setHeight(dp(HEIGHT_DP))
+                        .setPrimaryLabelContent(PRIMARY_LABEL)
+                        .setContentDescription(dynamicContentDescription)
+                        .build();
+
+        assertThat(chip.getContentDescription().toProto())
+                .isEqualTo(dynamicContentDescription.toProto());
+    }
+
+    private void assertFromLayoutElementChipIsEqual(
+            @NonNull Chip chip,
+            @HorizontalAlignment int hAlign,
+            @ColorInt int expectedBackgroundColor,
+            @Nullable StringProp expectedContDesc,
+            @NonNull String expectedMetadata,
+            @Nullable LayoutElement expectedPrimaryText,
+            @Nullable LayoutElement expectedLabel,
+            @Nullable LayoutElement expectedIcon,
+            @Nullable LayoutElement expectedCustomContent) {
+        Box box = new Box.Builder().addContent(chip).build();
+
+        Chip newChip = Chip.fromLayoutElement(box.getContents().get(0));
+
+        assertThat(newChip).isNotNull();
+        assertChipIsEqual(
+                newChip,
+                hAlign,
+                expectedBackgroundColor,
+                expectedContDesc,
+                expectedMetadata,
+                expectedPrimaryText,
+                expectedLabel,
+                expectedIcon,
+                expectedCustomContent);
+    }
+
+    private void assertChipIsEqual(
+            @NonNull Chip actualChip,
+            @HorizontalAlignment int hAlign,
+            @ColorInt int expectedBackgroundColor,
+            @Nullable StringProp expectedContDesc,
+            @NonNull String expectedMetadata,
+            @Nullable LayoutElement expectedPrimaryText,
+            @Nullable LayoutElement expectedLabel,
+            @Nullable LayoutElement expectedIcon,
+            @Nullable LayoutElement expectedCustomContent) {
+        assertThat(actualChip.getMetadataTag()).isEqualTo(expectedMetadata);
+        assertThat(actualChip.getClickable().toProto()).isEqualTo(CLICKABLE.toProto());
+        assertThat(
+                        actualChip
+                                .getWidth()
+                                .toContainerDimensionProto()
+                                .getLinearDimension()
+                                .getValue())
+                .isEqualTo(WIDTH_DP);
+        assertThat(
+                        actualChip
+                                .getHeight()
+                                .toContainerDimensionProto()
+                                .getLinearDimension()
+                                .getValue())
+                .isEqualTo(HEIGHT_DP);
+        assertThat(actualChip.getBackgroundColor().getArgb()).isEqualTo(expectedBackgroundColor);
+        assertThat(actualChip.getHorizontalAlignment()).isEqualTo(hAlign);
+
+        if (expectedContDesc == null) {
+            assertThat(actualChip.getContentDescription()).isNull();
+        } else {
+            assertThat(actualChip.getContentDescription().toProto())
+                    .isEqualTo(expectedContDesc.toProto());
+        }
+
+        if (expectedPrimaryText == null) {
+            assertThat(actualChip.getPrimaryLabelContent()).isNull();
+        } else {
+            assertThat(actualChip.getPrimaryLabelContent().toLayoutElementProto())
+                    .isEqualTo(expectedPrimaryText.toLayoutElementProto());
+        }
+
+        if (expectedLabel == null) {
+            assertThat(actualChip.getSecondaryLabelContent()).isNull();
+        } else {
+            assertThat(actualChip.getSecondaryLabelContent().toLayoutElementProto())
+                    .isEqualTo(expectedLabel.toLayoutElementProto());
+        }
+
+        if (expectedIcon == null) {
+            assertThat(actualChip.getIconContent()).isNull();
+        } else {
+            assertThat(actualChip.getIconContent().toLayoutElementProto())
+                    .isEqualTo(expectedIcon.toLayoutElementProto());
+        }
+
+        if (expectedCustomContent == null) {
+            assertThat(actualChip.getCustomContent()).isNull();
+        } else {
+            assertThat(actualChip.getCustomContent().toLayoutElementProto())
+                    .isEqualTo(expectedCustomContent.toLayoutElementProto());
+        }
+    }
+
+    private StringProp staticString(String s) {
+        return new StringProp.Builder(s).build();
+    }
+}
diff --git a/wear/protolayout/protolayout-material/api/current.ignore b/wear/protolayout/protolayout-material/api/current.ignore
deleted file mode 100644
index 752deff..0000000
--- a/wear/protolayout/protolayout-material/api/current.ignore
+++ /dev/null
@@ -1,19 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.wear.protolayout.material.CompactChip#hasExcludeFontPadding():
-    Removed method androidx.wear.protolayout.material.CompactChip.hasExcludeFontPadding() from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.CompactChip.Builder#setExcludeFontPadding(boolean):
-    Removed method androidx.wear.protolayout.material.CompactChip.Builder.setExcludeFontPadding(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.CompactChip.Builder#setExcludeFontPadding(boolean) parameter #0:
-    Removed parameter arg1 in androidx.wear.protolayout.material.CompactChip.Builder.setExcludeFontPadding(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.Text#hasExcludeFontPadding():
-    Removed method androidx.wear.protolayout.material.Text.hasExcludeFontPadding() from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.Text.Builder#setExcludeFontPadding(boolean):
-    Removed method androidx.wear.protolayout.material.Text.Builder.setExcludeFontPadding(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.Text.Builder#setExcludeFontPadding(boolean) parameter #0:
-    Removed parameter arg1 in androidx.wear.protolayout.material.Text.Builder.setExcludeFontPadding(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.TitleChip#hasExcludeFontPadding():
-    Removed method androidx.wear.protolayout.material.TitleChip.hasExcludeFontPadding() from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.TitleChip.Builder#setExcludeFontPadding(boolean):
-    Removed method androidx.wear.protolayout.material.TitleChip.Builder.setExcludeFontPadding(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.TitleChip.Builder#setExcludeFontPadding(boolean) parameter #0:
-    Removed parameter arg1 in androidx.wear.protolayout.material.TitleChip.Builder.setExcludeFontPadding(boolean arg1) from compatibility checked API surface
diff --git a/wear/protolayout/protolayout-material/api/restricted_current.ignore b/wear/protolayout/protolayout-material/api/restricted_current.ignore
deleted file mode 100644
index 752deff..0000000
--- a/wear/protolayout/protolayout-material/api/restricted_current.ignore
+++ /dev/null
@@ -1,19 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.wear.protolayout.material.CompactChip#hasExcludeFontPadding():
-    Removed method androidx.wear.protolayout.material.CompactChip.hasExcludeFontPadding() from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.CompactChip.Builder#setExcludeFontPadding(boolean):
-    Removed method androidx.wear.protolayout.material.CompactChip.Builder.setExcludeFontPadding(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.CompactChip.Builder#setExcludeFontPadding(boolean) parameter #0:
-    Removed parameter arg1 in androidx.wear.protolayout.material.CompactChip.Builder.setExcludeFontPadding(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.Text#hasExcludeFontPadding():
-    Removed method androidx.wear.protolayout.material.Text.hasExcludeFontPadding() from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.Text.Builder#setExcludeFontPadding(boolean):
-    Removed method androidx.wear.protolayout.material.Text.Builder.setExcludeFontPadding(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.Text.Builder#setExcludeFontPadding(boolean) parameter #0:
-    Removed parameter arg1 in androidx.wear.protolayout.material.Text.Builder.setExcludeFontPadding(boolean arg1) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.TitleChip#hasExcludeFontPadding():
-    Removed method androidx.wear.protolayout.material.TitleChip.hasExcludeFontPadding() from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.TitleChip.Builder#setExcludeFontPadding(boolean):
-    Removed method androidx.wear.protolayout.material.TitleChip.Builder.setExcludeFontPadding(boolean) from compatibility checked API surface
-BecameUnchecked: androidx.wear.protolayout.material.TitleChip.Builder#setExcludeFontPadding(boolean) parameter #0:
-    Removed parameter arg1 in androidx.wear.protolayout.material.TitleChip.Builder.setExcludeFontPadding(boolean arg1) from compatibility checked API surface
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java
index 2ebe5cc..67ddcc5 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/Chip.java
@@ -26,21 +26,15 @@
 import static androidx.wear.protolayout.material.ChipDefaults.HORIZONTAL_PADDING;
 import static androidx.wear.protolayout.material.ChipDefaults.ICON_SIZE;
 import static androidx.wear.protolayout.material.ChipDefaults.ICON_SPACER_WIDTH;
-import static androidx.wear.protolayout.material.ChipDefaults.MIN_TAPPABLE_HEIGHT;
-import static androidx.wear.protolayout.material.ChipDefaults.MIN_TAPPABLE_WIDTH;
 import static androidx.wear.protolayout.material.ChipDefaults.PRIMARY_COLORS;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_CUSTOM_CONTENT;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_ICON;
 import static androidx.wear.protolayout.materialcore.Helper.checkNotNull;
-import static androidx.wear.protolayout.materialcore.Helper.checkTag;
-import static androidx.wear.protolayout.materialcore.Helper.getMetadataTagName;
-import static androidx.wear.protolayout.materialcore.Helper.getTagBytes;
-import static androidx.wear.protolayout.materialcore.Helper.radiusOf;
-
-import static java.lang.Math.max;
+import static androidx.wear.protolayout.materialcore.Helper.staticString;
 
 import android.content.Context;
 
 import androidx.annotation.Dimension;
-import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.OptIn;
@@ -50,34 +44,18 @@
 import androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters;
 import androidx.wear.protolayout.DimensionBuilders.ContainerDimension;
 import androidx.wear.protolayout.DimensionBuilders.DpProp;
-import androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp;
 import androidx.wear.protolayout.LayoutElementBuilders;
-import androidx.wear.protolayout.LayoutElementBuilders.Box;
 import androidx.wear.protolayout.LayoutElementBuilders.ColorFilter;
-import androidx.wear.protolayout.LayoutElementBuilders.Column;
 import androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignment;
 import androidx.wear.protolayout.LayoutElementBuilders.Image;
 import androidx.wear.protolayout.LayoutElementBuilders.LayoutElement;
-import androidx.wear.protolayout.LayoutElementBuilders.Row;
-import androidx.wear.protolayout.LayoutElementBuilders.Spacer;
-import androidx.wear.protolayout.ModifiersBuilders.Background;
 import androidx.wear.protolayout.ModifiersBuilders.Clickable;
-import androidx.wear.protolayout.ModifiersBuilders.Corner;
-import androidx.wear.protolayout.ModifiersBuilders.ElementMetadata;
-import androidx.wear.protolayout.ModifiersBuilders.Modifiers;
-import androidx.wear.protolayout.ModifiersBuilders.Padding;
-import androidx.wear.protolayout.ModifiersBuilders.Semantics;
 import androidx.wear.protolayout.TypeBuilders.StringProp;
 import androidx.wear.protolayout.expression.Fingerprint;
 import androidx.wear.protolayout.expression.ProtoLayoutExperimental;
 import androidx.wear.protolayout.material.Typography.TypographyName;
 import androidx.wear.protolayout.proto.LayoutElementProto;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * ProtoLayout component {@link Chip} that represents clickable object with the text, optional label
  * and optional icon or with custom content.
@@ -114,67 +92,28 @@
  *     used inside of {@link androidx.wear.protolayout.material.layouts.PrimaryLayout}.
  */
 public class Chip implements LayoutElement {
-    /**
-     * Tool tag for Metadata in Modifiers, so we know that Box is actually a Chip with only text.
-     */
-    static final String METADATA_TAG_TEXT = "TXTCHP";
-    /** Tool tag for Metadata in Modifiers, so we know that Box is actually a Chip with icon. */
-    static final String METADATA_TAG_ICON = "ICNCHP";
-    /**
-     * Tool tag for Metadata in Modifiers, so we know that Box is actually a Chip with custom
-     * content.
-     */
-    static final String METADATA_TAG_CUSTOM_CONTENT = "CSTCHP";
+    @NonNull private final androidx.wear.protolayout.materialcore.Chip mElement;
 
-    /** Outer tappable Box. */
-    @NonNull private final Box mImpl;
-
-    /** Inner visible Box with all Chip elements. */
-    @NonNull private final Box mElement;
-
-    Chip(@NonNull Box impl) {
-        mImpl = impl;
-        mElement = (Box) impl.getContents().get(0);
+    Chip(@NonNull androidx.wear.protolayout.materialcore.Chip element) {
+        mElement = element;
     }
 
     /** Builder class for {@link androidx.wear.protolayout.material.Chip}. */
     public static final class Builder implements LayoutElement.Builder {
-        private static final int NOT_SET = 0;
-        private static final int TEXT = 1;
-        private static final int ICON = 2;
-        private static final int CUSTOM_CONTENT = 3;
-
-        @RestrictTo(Scope.LIBRARY)
-        @Retention(RetentionPolicy.SOURCE)
-        @IntDef({NOT_SET, TEXT, ICON, CUSTOM_CONTENT})
-        @interface ChipType {}
-
         @NonNull private final Context mContext;
         @Nullable private LayoutElement mCustomContent;
         @Nullable private String mImageResourceId = null;
         @Nullable private String mPrimaryLabel = null;
         @Nullable private String mSecondaryLabel = null;
-        @NonNull private final Clickable mClickable;
         @Nullable private StringProp mContentDescription = null;
-        @NonNull private ContainerDimension mWidth;
-        @NonNull private DpProp mHeight = DEFAULT_HEIGHT;
         @NonNull private ChipColors mChipColors = PRIMARY_COLORS;
         @NonNull private DpProp mIconSize = ICON_SIZE;
         @HorizontalAlignment private int mHorizontalAlign = HORIZONTAL_ALIGN_UNDEFINED;
         @TypographyName private int mPrimaryLabelTypography;
-        @NonNull private DpProp mHorizontalPadding = HORIZONTAL_PADDING;
         private boolean mIsScalable = true;
         private boolean mIsFontPaddingExcluded = false;
         private int mMaxLines = 0; // 0 indicates that is not set.
-        @NonNull private String mMetadataTag = "";
-
-        @NonNull static final Map<Integer, String> TYPE_TO_TAG = new HashMap<>();
-
-        static {
-            TYPE_TO_TAG.put(ICON, METADATA_TAG_ICON);
-            TYPE_TO_TAG.put(TEXT, METADATA_TAG_TEXT);
-            TYPE_TO_TAG.put(CUSTOM_CONTENT, METADATA_TAG_CUSTOM_CONTENT);
-        }
+        @NonNull private final androidx.wear.protolayout.materialcore.Chip.Builder mCoreBuilder;
 
         /**
          * Creates a builder for the {@link Chip} with associated action. It is required to add
@@ -190,13 +129,16 @@
                 @NonNull Clickable clickable,
                 @NonNull DeviceParameters deviceParameters) {
             mContext = context;
-            mClickable = clickable;
-            mWidth =
-                    dp(
-                            (100 - 2 * DEFAULT_MARGIN_PERCENT)
-                                    * deviceParameters.getScreenWidthDp()
-                                    / 100);
+            float width =
+                    (100 - 2 * DEFAULT_MARGIN_PERCENT) * deviceParameters.getScreenWidthDp() / 100;
             mPrimaryLabelTypography = Typography.TYPOGRAPHY_BUTTON;
+            mCoreBuilder = new androidx.wear.protolayout.materialcore.Chip.Builder(clickable);
+            mCoreBuilder.setWidth(dp(width));
+            mCoreBuilder.setHorizontalPadding(HORIZONTAL_PADDING);
+            mCoreBuilder.setHeight(DEFAULT_HEIGHT);
+            mCoreBuilder.setBackgroundColor(mChipColors.getBackgroundColor());
+            mCoreBuilder.setMinimalTappableSquareLength(ChipDefaults.MIN_TAPPABLE_SQUARE_LENGTH);
+            mCoreBuilder.setIconSpacerWidth(ICON_SPACER_WIDTH);
         }
 
         /**
@@ -204,7 +146,7 @@
          */
         @NonNull
         public Builder setWidth(@NonNull ContainerDimension width) {
-            mWidth = width;
+            mCoreBuilder.setWidth(width);
             return this;
         }
 
@@ -214,8 +156,7 @@
          */
         @NonNull
         public Builder setWidth(@Dimension(unit = DP) float width) {
-            mWidth = dp(width);
-            return this;
+            return setWidth(dp(width));
         }
 
         /**
@@ -237,9 +178,7 @@
          */
         @NonNull
         public Builder setContentDescription(@NonNull CharSequence contentDescription) {
-            this.mContentDescription =
-                    new StringProp.Builder(contentDescription.toString()).build();
-            return this;
+            return setContentDescription(staticString(contentDescription.toString()));
         }
 
         /**
@@ -352,6 +291,7 @@
         @NonNull
         public Builder setChipColors(@NonNull ChipColors chipColors) {
             mChipColors = chipColors;
+            mCoreBuilder.setBackgroundColor(chipColors.getBackgroundColor());
             return this;
         }
 
@@ -370,14 +310,14 @@
         /** Used for creating {@code CompactChip} and {@code TitleChip}. */
         @NonNull
         Builder setHorizontalPadding(@NonNull DpProp horizontalPadding) {
-            this.mHorizontalPadding = horizontalPadding;
+            mCoreBuilder.setHorizontalPadding(horizontalPadding);
             return this;
         }
 
         /** Used for creating {@code CompactChip} and {@code TitleChip}. */
         @NonNull
         Builder setHeight(@NonNull DpProp height) {
-            this.mHeight = height;
+            mCoreBuilder.setHeight(height);
             return this;
         }
 
@@ -392,64 +332,16 @@
         @NonNull
         @Override
         public Chip build() {
-            Modifiers.Builder modifiers =
-                    new Modifiers.Builder()
-                            .setPadding(
-                                    new Padding.Builder()
-                                            .setStart(mHorizontalPadding)
-                                            .setEnd(mHorizontalPadding)
-                                            .build())
-                            .setBackground(
-                                    new Background.Builder()
-                                            .setColor(mChipColors.getBackgroundColor())
-                                            .setCorner(
-                                                    new Corner.Builder()
-                                                            .setRadius(radiusOf(mHeight))
-                                                            .build())
-                                            .build());
+            mCoreBuilder.setContentDescription(getCorrectContentDescription());
+            mCoreBuilder.setHorizontalAlignment(getCorrectHorizontalAlignment());
 
-            Box.Builder visible =
-                    new Box.Builder()
-                            .setHeight(mHeight)
-                            .setWidth(mWidth)
-                            .setHorizontalAlignment(getCorrectHorizontalAlignment())
-                            .addContent(getCorrectContent())
-                            .setModifiers(modifiers.build());
-
-            Box tappable =
-                    new Box.Builder()
-                            .setWidth(resolveMinTappableWidth())
-                            .setHeight(dp(resolveMinTappableHeight()))
-                            .setModifiers(
-                                    new Modifiers.Builder()
-                                            .setClickable(mClickable)
-                                            .setMetadata(getCorrectMetadataTag())
-                                            .setSemantics(
-                                                    new Semantics.Builder()
-                                                            .setContentDescription(
-                                                                    getCorrectContentDescription())
-                                                            .build())
-                                            .build())
-                            .addContent(visible.build())
-                            .build();
-
-            return new Chip(tappable);
-        }
-
-        private ContainerDimension resolveMinTappableWidth() {
-            if (mWidth instanceof DpProp) {
-                return dp(max(((DpProp) mWidth).getValue(), MIN_TAPPABLE_WIDTH.getValue()));
-            } else if (mWidth instanceof WrappedDimensionProp) {
-                return new WrappedDimensionProp.Builder()
-                        .setMinimumSize(MIN_TAPPABLE_WIDTH)
-                        .build();
+            if (mCustomContent != null) {
+                mCoreBuilder.setCustomContent(mCustomContent);
             } else {
-                return mWidth;
+                setCorrectContent();
             }
-        }
 
-        private float resolveMinTappableHeight() {
-            return max(mHeight.getValue(), MIN_TAPPABLE_HEIGHT.getValue());
+            return new Chip(mCoreBuilder.build());
         }
 
         @NonNull
@@ -479,27 +371,8 @@
             }
         }
 
-        private ElementMetadata getCorrectMetadataTag() {
-            String tag = METADATA_TAG_TEXT;
-            if (!mMetadataTag.isEmpty()) {
-                tag = mMetadataTag;
-            }
-            if (mCustomContent != null) {
-                tag = METADATA_TAG_CUSTOM_CONTENT;
-            }
-            if (mImageResourceId != null) {
-                tag = METADATA_TAG_ICON;
-            }
-            return new ElementMetadata.Builder().setTagData(getTagBytes(tag)).build();
-        }
-
-        @NonNull
         @OptIn(markerClass = ProtoLayoutExperimental.class)
-        private LayoutElement getCorrectContent() {
-            if (mCustomContent != null) {
-                return mCustomContent;
-            }
-
+        private void setCorrectContent() {
             Text mainTextElement =
                     new Text.Builder(mContext, checkNotNull(mPrimaryLabel))
                             .setTypography(mPrimaryLabelTypography)
@@ -511,11 +384,7 @@
                             .setExcludeFontPadding(mIsFontPaddingExcluded)
                             .build();
 
-            // Placeholder for text.
-            Column.Builder column =
-                    new Column.Builder()
-                            .setHorizontalAlignment(HORIZONTAL_ALIGN_START)
-                            .addContent(putLayoutInBox(mainTextElement).build());
+            mCoreBuilder.setPrimaryLabelContent(mainTextElement);
 
             if (mSecondaryLabel != null) {
                 Text labelTextElement =
@@ -526,32 +395,21 @@
                                 .setOverflow(LayoutElementBuilders.TEXT_OVERFLOW_ELLIPSIZE_END)
                                 .setMultilineAlignment(LayoutElementBuilders.TEXT_ALIGN_START)
                                 .build();
-                column.addContent(putLayoutInBox(labelTextElement).build());
+                mCoreBuilder.setSecondaryLabelContent(labelTextElement);
             }
 
-            Box texts = putLayoutInBox(column.build()).build();
-            if (mImageResourceId == null) {
-                return texts;
-            } else {
-                return new Row.Builder()
-                        .addContent(
-                                new Image.Builder()
-                                        .setResourceId(mImageResourceId)
-                                        .setWidth(mIconSize)
-                                        .setHeight(mIconSize)
-                                        .setColorFilter(
-                                                new ColorFilter.Builder()
-                                                        .setTint(mChipColors.getIconColor())
-                                                        .build())
-                                        .build())
-                        .addContent(
-                                new Spacer.Builder()
-                                        .setHeight(mHeight)
-                                        .setWidth(ICON_SPACER_WIDTH)
-                                        .build())
-                        .addContent(texts)
-                        .setVerticalAlignment(LayoutElementBuilders.VERTICAL_ALIGN_CENTER)
-                        .build();
+            if (mImageResourceId != null) {
+                Image icon =
+                        new Image.Builder()
+                                .setResourceId(mImageResourceId)
+                                .setWidth(mIconSize)
+                                .setHeight(mIconSize)
+                                .setColorFilter(
+                                        new ColorFilter.Builder()
+                                                .setTint(mChipColors.getIconColor())
+                                                .build())
+                                .build();
+                mCoreBuilder.setIconContent(icon);
             }
         }
 
@@ -561,42 +419,30 @@
             }
             return mSecondaryLabel != null ? 1 : 2;
         }
-
-        private Box.Builder putLayoutInBox(@NonNull LayoutElement element) {
-            // Wrapped and centered content are default.
-            return new Box.Builder().addContent(element);
-        }
     }
 
     /** Returns the visible height of this Chip. */
     @NonNull
     public ContainerDimension getHeight() {
-        return checkNotNull(mElement.getHeight());
+        return mElement.getHeight();
     }
 
     /** Returns width of this Chip. */
     @NonNull
     public ContainerDimension getWidth() {
-        return checkNotNull(mElement.getWidth());
+        return mElement.getWidth();
     }
 
     /** Returns click event action associated with this Chip. */
     @NonNull
     public Clickable getClickable() {
-        return checkNotNull(checkNotNull(mImpl.getModifiers()).getClickable());
-    }
-
-    /** Returns background color of this Chip. */
-    @NonNull
-    private ColorProp getBackgroundColor() {
-        return checkNotNull(
-                checkNotNull(checkNotNull(mElement.getModifiers()).getBackground()).getColor());
+        return mElement.getClickable();
     }
 
     /** Returns chip colors of this Chip. */
     @NonNull
     public ChipColors getChipColors() {
-        ColorProp backgroundColor = getBackgroundColor();
+        ColorProp backgroundColor = mElement.getBackgroundColor();
         ColorProp contentColor = null;
         ColorProp secondaryContentColor = null;
         ColorProp iconTintColor = null;
@@ -631,20 +477,13 @@
     /** Returns content description of this Chip. */
     @Nullable
     public StringProp getContentDescription() {
-        Semantics semantics = checkNotNull(mImpl.getModifiers()).getSemantics();
-        if (semantics == null) {
-            return null;
-        }
-        return semantics.getContentDescription();
+        return mElement.getContentDescription();
     }
 
     /** Returns custom content from this Chip if it has been added. Otherwise, it returns null. */
     @Nullable
     public LayoutElement getCustomContent() {
-        if (getMetadataTag().equals(METADATA_TAG_CUSTOM_CONTENT)) {
-            return checkNotNull(checkNotNull(mElement.getContents()).get(0));
-        }
-        return null;
+        return mElement.getCustomContent();
     }
 
     /** Returns primary label from this Chip if it has been added. Otherwise, it returns null. */
@@ -657,8 +496,8 @@
     /** Returns secondary label from this Chip if it has been added. Otherwise, it returns null. */
     @Nullable
     public String getSecondaryLabelContent() {
-        Text label = getSecondaryLabelContentObject();
-        return label != null ? label.getText().getValue() : null;
+        Text secondaryLabel = getSecondaryLabelContentObject();
+        return secondaryLabel != null ? secondaryLabel.getText().getValue() : null;
     }
 
     /** Returns icon id from this Chip if it has been added. Otherwise, it returns null. */
@@ -670,58 +509,38 @@
 
     @Nullable
     private Text getPrimaryLabelContentObject() {
-        return getPrimaryOrSecondaryLabelContent(0);
+        LayoutElement content = mElement.getPrimaryLabelContent();
+        if (content != null) {
+            return Text.fromLayoutElement(content);
+        }
+        return null;
     }
 
     @Nullable
     private Text getSecondaryLabelContentObject() {
-        return getPrimaryOrSecondaryLabelContent(1);
+        LayoutElement content = mElement.getSecondaryLabelContent();
+        if (content != null) {
+            return Text.fromLayoutElement(content);
+        }
+        return null;
     }
 
     @Nullable
     private Image getIconContentObject() {
-        if (!getMetadataTag().equals(METADATA_TAG_ICON)) {
-            return null;
-        }
-        return ((Image) ((Row) mElement.getContents().get(0)).getContents().get(0));
-    }
-
-    @Nullable
-    private Text getPrimaryOrSecondaryLabelContent(int index) {
-        String metadataTag = getMetadataTag();
-        if (metadataTag.equals(METADATA_TAG_CUSTOM_CONTENT)) {
-            return null;
-        }
-        // In any other case, text (either primary or primary + label) must be present.
-        Column content;
-        if (metadataTag.equals(METADATA_TAG_ICON)) {
-            content =
-                    (Column)
-                            ((Box) ((Row) mElement.getContents().get(0)).getContents().get(2))
-                                    .getContents()
-                                    .get(0);
-        } else {
-            content = (Column) ((Box) mElement.getContents().get(0)).getContents().get(0);
-        }
-
-        // We need to check this as this can be the case when we called for label, which doesn't
-        // exist.
-        return index < content.getContents().size()
-                ? Text.fromLayoutElement(
-                        ((Box) content.getContents().get(index)).getContents().get(0))
-                : null;
+        LayoutElement content = mElement.getIconContent();
+        return content instanceof Image ? (Image) content : null;
     }
 
     /** Returns the horizontal alignment of the content in this Chip. */
     @HorizontalAlignment
     public int getHorizontalAlignment() {
-        return checkNotNull(mElement.getHorizontalAlignment()).getValue();
+        return mElement.getHorizontalAlignment();
     }
 
     /** Returns metadata tag set to this Chip. */
     @NonNull
     String getMetadataTag() {
-        return getMetadataTagName(checkNotNull(checkNotNull(mImpl.getModifiers()).getMetadata()));
+        return mElement.getMetadataTag();
     }
 
     /** Returns whether the font padding for the primary label is excluded. */
@@ -741,28 +560,22 @@
         if (element instanceof Chip) {
             return (Chip) element;
         }
-        if (!(element instanceof Box)) {
-            return null;
-        }
-        Box boxElement = (Box) element;
-        if (!checkTag(boxElement.getModifiers(), Builder.TYPE_TO_TAG.values())) {
-            return null;
-        }
-        // Now we are sure that this element is a Chip.
-        return new Chip(boxElement);
+        androidx.wear.protolayout.materialcore.Chip coreChip =
+                androidx.wear.protolayout.materialcore.Chip.fromLayoutElement(element);
+        return coreChip == null ? null : new Chip(coreChip);
     }
 
     @NonNull
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
     public LayoutElementProto.LayoutElement toLayoutElementProto() {
-        return mImpl.toLayoutElementProto();
+        return mElement.toLayoutElementProto();
     }
 
     @Nullable
     @Override
     @RestrictTo(Scope.LIBRARY_GROUP)
     public Fingerprint getFingerprint() {
-        return mImpl.getFingerprint();
+        return mElement.getFingerprint();
     }
 }
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/ChipDefaults.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/ChipDefaults.java
index be8531c..d5cfbe1 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/ChipDefaults.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/ChipDefaults.java
@@ -37,15 +37,10 @@
     @NonNull
     public static final DpProp COMPACT_HEIGHT = dp(32);
 
-    /** The minimum width of tappable target area. */
+    /** The minimum size of tappable target area. */
     @RestrictTo(Scope.LIBRARY_GROUP)
     @NonNull
-    public static final DpProp MIN_TAPPABLE_WIDTH = dp(48);
-
-    /** The minimum height of tappable target area. */
-    @RestrictTo(Scope.LIBRARY_GROUP)
-    @NonNull
-    public static final DpProp MIN_TAPPABLE_HEIGHT = dp(48);
+    public static final DpProp MIN_TAPPABLE_SQUARE_LENGTH = dp(48);
 
     /** The default height for standard {@link TitleChip} */
     @RestrictTo(Scope.LIBRARY_GROUP)
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CompactChip.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CompactChip.java
index c659a15..436aaad 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CompactChip.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/CompactChip.java
@@ -19,14 +19,11 @@
 import static androidx.wear.protolayout.DimensionBuilders.wrap;
 import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_CENTER;
 import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_START;
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_ICON;
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_TEXT;
 import static androidx.wear.protolayout.material.ChipDefaults.COMPACT_HEIGHT;
 import static androidx.wear.protolayout.material.ChipDefaults.COMPACT_HORIZONTAL_PADDING;
 import static androidx.wear.protolayout.material.ChipDefaults.COMPACT_ICON_SIZE;
 import static androidx.wear.protolayout.material.ChipDefaults.COMPACT_PRIMARY_COLORS;
 import static androidx.wear.protolayout.materialcore.Helper.checkNotNull;
-import static androidx.wear.protolayout.materialcore.Helper.checkTag;
 
 import android.content.Context;
 
@@ -36,7 +33,6 @@
 import androidx.annotation.RestrictTo;
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters;
-import androidx.wear.protolayout.LayoutElementBuilders.Box;
 import androidx.wear.protolayout.LayoutElementBuilders.LayoutElement;
 import androidx.wear.protolayout.ModifiersBuilders.Clickable;
 import androidx.wear.protolayout.expression.Fingerprint;
@@ -220,17 +216,9 @@
         if (element instanceof CompactChip) {
             return (CompactChip) element;
         }
-        if (!(element instanceof Box)) {
-            return null;
-        }
-        Box boxElement = (Box) element;
-        if (!checkTag(boxElement.getModifiers(), METADATA_TAG_TEXT)
-                && !checkTag(boxElement.getModifiers(), METADATA_TAG_ICON)) {
-            return null;
-        }
-
-        // Now we are sure that this element is a CompactChip.
-        return new CompactChip(new Chip(boxElement));
+        androidx.wear.protolayout.materialcore.Chip coreChip =
+                androidx.wear.protolayout.materialcore.Chip.fromLayoutElement(element);
+        return coreChip == null ? null : new CompactChip(new Chip(coreChip));
     }
 
     /** Returns whether the font padding for the primary label is excluded. */
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/TitleChip.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/TitleChip.java
index 1b3523a..e6e355c 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/TitleChip.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/TitleChip.java
@@ -19,14 +19,11 @@
 import static androidx.annotation.Dimension.DP;
 import static androidx.wear.protolayout.DimensionBuilders.dp;
 import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_UNDEFINED;
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_ICON;
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_TEXT;
 import static androidx.wear.protolayout.material.ChipDefaults.ICON_SIZE;
 import static androidx.wear.protolayout.material.ChipDefaults.TITLE_HEIGHT;
 import static androidx.wear.protolayout.material.ChipDefaults.TITLE_HORIZONTAL_PADDING;
 import static androidx.wear.protolayout.material.ChipDefaults.TITLE_PRIMARY_COLORS;
 import static androidx.wear.protolayout.materialcore.Helper.checkNotNull;
-import static androidx.wear.protolayout.materialcore.Helper.checkTag;
 
 import android.content.Context;
 
@@ -38,7 +35,6 @@
 import androidx.annotation.RestrictTo.Scope;
 import androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters;
 import androidx.wear.protolayout.DimensionBuilders.ContainerDimension;
-import androidx.wear.protolayout.LayoutElementBuilders.Box;
 import androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignment;
 import androidx.wear.protolayout.LayoutElementBuilders.LayoutElement;
 import androidx.wear.protolayout.ModifiersBuilders.Clickable;
@@ -272,16 +268,9 @@
         if (element instanceof TitleChip) {
             return (TitleChip) element;
         }
-        if (!(element instanceof Box)) {
-            return null;
-        }
-        Box boxElement = (Box) element;
-        if (!checkTag(boxElement.getModifiers(), METADATA_TAG_TEXT)
-                && !checkTag(boxElement.getModifiers(), METADATA_TAG_ICON)) {
-            return null;
-        }
-        // Now we are sure that this element is a TitleChip.
-        return new TitleChip(new Chip(boxElement));
+        androidx.wear.protolayout.materialcore.Chip coreChip =
+                androidx.wear.protolayout.materialcore.Chip.fromLayoutElement(element);
+        return coreChip == null ? null : new TitleChip(new Chip(coreChip));
     }
 
     /** Returns whether the font padding for the primary label is excluded. */
diff --git a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/PrimaryLayout.java b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/PrimaryLayout.java
index 7045df9..1d69190 100644
--- a/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/PrimaryLayout.java
+++ b/wear/protolayout/protolayout-material/src/main/java/androidx/wear/protolayout/material/layouts/PrimaryLayout.java
@@ -20,7 +20,7 @@
 import static androidx.wear.protolayout.DimensionBuilders.dp;
 import static androidx.wear.protolayout.DimensionBuilders.expand;
 import static androidx.wear.protolayout.DimensionBuilders.wrap;
-import static androidx.wear.protolayout.material.ChipDefaults.MIN_TAPPABLE_HEIGHT;
+import static androidx.wear.protolayout.material.ChipDefaults.MIN_TAPPABLE_SQUARE_LENGTH;
 import static androidx.wear.protolayout.material.layouts.LayoutDefaults.DEFAULT_VERTICAL_SPACER_HEIGHT;
 import static androidx.wear.protolayout.material.layouts.LayoutDefaults.PRIMARY_LAYOUT_CHIP_HORIZONTAL_PADDING_ROUND_DP;
 import static androidx.wear.protolayout.material.layouts.LayoutDefaults.PRIMARY_LAYOUT_CHIP_HORIZONTAL_PADDING_SQUARE_DP;
@@ -258,7 +258,8 @@
             float horizontalPadding = getHorizontalPadding();
             float horizontalChipPadding = getChipHorizontalPadding();
 
-            float primaryChipHeight = mPrimaryChip != null ? MIN_TAPPABLE_HEIGHT.getValue() : 0;
+            float primaryChipHeight =
+                    mPrimaryChip != null ? MIN_TAPPABLE_SQUARE_LENGTH.getValue() : 0;
 
             DpProp mainContentHeight =
                     dp(
diff --git a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/ChipTest.java b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/ChipTest.java
index 797ec80..af82462 100644
--- a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/ChipTest.java
+++ b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/ChipTest.java
@@ -21,6 +21,9 @@
 import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_CENTER;
 import static androidx.wear.protolayout.LayoutElementBuilders.HORIZONTAL_ALIGN_START;
 import static androidx.wear.protolayout.material.Utils.areChipColorsEqual;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_CUSTOM_CONTENT;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_ICON;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_TEXT;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -84,7 +87,7 @@
                 HORIZONTAL_ALIGN_CENTER,
                 ChipDefaults.PRIMARY_COLORS,
                 contentDescription,
-                Chip.METADATA_TAG_TEXT,
+                METADATA_TAG_TEXT,
                 MAIN_TEXT,
                 null,
                 null,
@@ -107,7 +110,7 @@
                 HORIZONTAL_ALIGN_START,
                 colors,
                 staticString(MAIN_TEXT + "\n" + secondaryLabel),
-                Chip.METADATA_TAG_ICON,
+                METADATA_TAG_ICON,
                 MAIN_TEXT,
                 secondaryLabel,
                 "ICON_ID",
@@ -126,7 +129,7 @@
                 HORIZONTAL_ALIGN_START,
                 ChipDefaults.PRIMARY_COLORS,
                 staticString(MAIN_TEXT),
-                Chip.METADATA_TAG_TEXT,
+                METADATA_TAG_TEXT,
                 MAIN_TEXT,
                 null,
                 null,
@@ -167,7 +170,7 @@
                         ChipDefaults.PRIMARY_COLORS.getBackgroundColor(),
                         new ColorProp.Builder(0).build()),
                 contentDescription,
-                Chip.METADATA_TAG_CUSTOM_CONTENT,
+                METADATA_TAG_CUSTOM_CONTENT,
                 null,
                 null,
                 null,
diff --git a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CompactChipTest.java b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CompactChipTest.java
index d0cbf92b..173cce2 100644
--- a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CompactChipTest.java
+++ b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/CompactChipTest.java
@@ -16,9 +16,9 @@
 
 package androidx.wear.protolayout.material;
 
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_ICON;
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_TEXT;
 import static androidx.wear.protolayout.material.Utils.areChipColorsEqual;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_ICON;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_TEXT;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TitleChipTest.java b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TitleChipTest.java
index 683691d..3463ba3 100644
--- a/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TitleChipTest.java
+++ b/wear/protolayout/protolayout-material/src/test/java/androidx/wear/protolayout/material/TitleChipTest.java
@@ -17,9 +17,9 @@
 package androidx.wear.protolayout.material;
 
 import static androidx.wear.protolayout.DimensionBuilders.dp;
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_ICON;
-import static androidx.wear.protolayout.material.Chip.METADATA_TAG_TEXT;
 import static androidx.wear.protolayout.material.Utils.areChipColorsEqual;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_ICON;
+import static androidx.wear.protolayout.materialcore.Chip.METADATA_TAG_TEXT;
 
 import static com.google.common.truth.Truth.assertThat;
 
diff --git a/wear/protolayout/protolayout-proto/build.gradle b/wear/protolayout/protolayout-proto/build.gradle
index 6c8c736..3610c23 100644
--- a/wear/protolayout/protolayout-proto/build.gradle
+++ b/wear/protolayout/protolayout-proto/build.gradle
@@ -82,8 +82,8 @@
 afterEvaluate {
     lint {
         lintOptions {
-            // protobuf generates unannotated and synthetic accessor methods
-            disable("UnknownNullness", "SyntheticAccessor")
+            // protobuf generates unannotated methods
+            disable("UnknownNullness")
         }
     }
 }
diff --git a/wear/protolayout/protolayout-renderer/lint-baseline.xml b/wear/protolayout/protolayout-renderer/lint-baseline.xml
new file mode 100644
index 0000000..316b2b8
--- /dev/null
+++ b/wear/protolayout/protolayout-renderer/lint-baseline.xml
@@ -0,0 +1,8392 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.getAnimatedImageFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (resource.getAnimatedImageFormat() == AnimatedImageFormat.ANIMATED_IMAGE_FORMAT_AVD) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidAnimatedImageResourceByResIdResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedImageFormat.ANIMATED_IMAGE_FORMAT_AVD can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (resource.getAnimatedImageFormat() == AnimatedImageFormat.ANIMATED_IMAGE_FORMAT_AVD) {"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidAnimatedImageResourceByResIdResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mAndroidResources.getDrawable(resource.getResourceId(), /* theme= */ null);"
+        errorLine2="                                                          ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidAnimatedImageResourceByResIdResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByContentUri.getContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        Uri resourceUri = Uri.parse(resource.getContentUri());"
+        errorLine2="                                             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByContentUri.getContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    &quot;Provided content URI &quot; + resource.getContentUri() + &quot; cannot be opened&quot;);"
+        errorLine2="                                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByContentUri.getContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        &quot;Cannot read from URI &quot; + resource.getContentUri());"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByContentUri.getContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    &quot;Cannot open file for URI &quot; + resource.getContentUri(), ex);"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByContentUri.getContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    &quot;Error while reading URI &quot; + resource.getContentUri(), ex);"
+        errorLine2="                                                          ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ResolvableFuture&lt;Drawable> resolvableFuture = ResolvableFuture.create();"
+        errorLine2="                                                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        resolvableFuture.set(d);"
+        errorLine2="                                         ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        resolvableFuture.set(d);"
+        errorLine2="                                             ~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        resolvableFuture.setException(ex);"
+        errorLine2="                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByContentUriResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByResId.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mAndroidResources.getDrawable(resource.getResourceId(), /* theme= */ null);"
+        errorLine2="                                                          ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidImageResourceByResIdResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.getAnimatedImageFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (resource.getAnimatedImageFormat() == AnimatedImageFormat.ANIMATED_IMAGE_FORMAT_AVD) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidSeekableAnimatedImageResourceByResIdResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedImageFormat.ANIMATED_IMAGE_FORMAT_AVD can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (resource.getAnimatedImageFormat() == AnimatedImageFormat.ANIMATED_IMAGE_FORMAT_AVD) {"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidSeekableAnimatedImageResourceByResIdResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                final XmlPullParser parser = mAndroidResources.getXml(resource.getResourceId());"
+        errorLine2="                                                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultAndroidSeekableAnimatedImageResourceByResIdResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.IMAGE_FORMAT_RGB_565 can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (inlineImage.getFormat() == ImageFormat.IMAGE_FORMAT_RGB_565"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (inlineImage.getFormat() == ImageFormat.IMAGE_FORMAT_RGB_565"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.IMAGE_FORMAT_ARGB_8888 can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || inlineImage.getFormat() == ImageFormat.IMAGE_FORMAT_ARGB_8888) {"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || inlineImage.getFormat() == ImageFormat.IMAGE_FORMAT_ARGB_8888) {"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.IMAGE_FORMAT_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        } else if (inlineImage.getFormat() == ImageFormat.IMAGE_FORMAT_UNDEFINED) {"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        } else if (inlineImage.getFormat() == ImageFormat.IMAGE_FORMAT_UNDEFINED) {"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.IMAGE_FORMAT_RGB_565 can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case IMAGE_FORMAT_RGB_565:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.IMAGE_FORMAT_ARGB_8888 can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case IMAGE_FORMAT_ARGB_8888:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.IMAGE_FORMAT_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case IMAGE_FORMAT_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        Config config = imageFormatToBitmapConfig(inlineImage.getFormat());"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getWidthPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int widthPx = inlineImage.getWidthPx();"
+        errorLine2="                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getHeightPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int heightPx = inlineImage.getHeightPx();"
+        errorLine2="                                   ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (inlineImage.getData().size() != expectedDataSize) {"
+        errorLine2="                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(inlineImage.getData().toByteArray()));"
+        errorLine2="                                                                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        inlineImage.getData().toByteArray(), 0, inlineImage.getData().size());"
+        errorLine2="                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        inlineImage.getData().toByteArray(), 0, inlineImage.getData().size());"
+        errorLine2="                                                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getHeightPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                bitmap, inlineImage.getWidthPx(), inlineImage.getHeightPx(), /* filter= */ true);"
+        errorLine2="                                                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getWidthPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                bitmap, inlineImage.getWidthPx(), inlineImage.getHeightPx(), /* filter= */ true);"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/DefaultInlineImageResourceResolver.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (entry.mTrigger.getInnerCase() != triggerCase"
+        errorLine2="                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/NodeInfo.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_VISIBLE_ONCE_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if ((triggerCase == InnerCase.ON_VISIBLE_ONCE_TRIGGER"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/NodeInfo.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_LOAD_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            || triggerCase == InnerCase.ON_LOAD_TRIGGER)"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/NodeInfo.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (entry.mTrigger.getInnerCase() == triggerCase &amp;&amp; entry.mDrawable != null) {"
+        errorLine2="                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/NodeInfo.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (entry.mDrawable.isRunning() &amp;&amp; entry.mTrigger.getInnerCase() == triggerCase) {"
+        errorLine2="                                                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/NodeInfo.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.values can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        for (InnerCase triggerCase : InnerCase.values()) {"
+        errorLine2="                                               ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/NodeInfo.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            checkNotNull(mPosIdToTreeNode.remove(posId)).destroy();"
+        errorLine2="            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/PositionIdTree.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            checkNotNull(mPosIdToTreeNode.remove(posId)).destroy();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/PositionIdTree.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!layout.getFingerprint().hasRoot()) {"
+        errorLine2="                    ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.hasRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!layout.getFingerprint().hasRoot()) {"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        NodeFingerprint prevRootFingerprint = prevTreeFingerprint.getRoot();"
+        errorLine2="                                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layout.getRoot(), layout.getFingerprint().getRoot(), ROOT_NODE_ID);"
+        errorLine2="                                                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layout.getRoot(), layout.getFingerprint().getRoot(), ROOT_NODE_ID);"
+        errorLine2="                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layout.getRoot(), layout.getFingerprint().getRoot(), ROOT_NODE_ID);"
+        errorLine2="                                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        NodeFingerprint prev = first.getRoot();"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        NodeFingerprint current = second.getRoot();"
+        errorLine2="                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfTypeValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return current.getSelfTypeValue() == prev.getSelfTypeValue()"
+        errorLine2="                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfTypeValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return current.getSelfTypeValue() == prev.getSelfTypeValue()"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; current.getSelfPropsValue() == prev.getSelfPropsValue()"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; current.getSelfPropsValue() == prev.getSelfPropsValue()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; current.getChildNodesValue() == prev.getChildNodesValue();"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; current.getChildNodesValue() == prev.getChildNodesValue();"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfTypeValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (prevNode.getSelfTypeValue() != node.getSelfTypeValue()) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfTypeValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (prevNode.getSelfTypeValue() != node.getSelfTypeValue()) {"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (node.getSelfPropsValue() == DISCARDED_FINGERPRINT_VALUE"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; node.getChildNodesValue() == DISCARDED_FINGERPRINT_VALUE) {"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (node.getChildNodesCount() == 0) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (prevNode.getChildNodesCount() != node.getChildNodesCount()) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (prevNode.getChildNodesCount() != node.getChildNodesCount()) {"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                node.getSelfPropsValue() == DISCARDED_FINGERPRINT_VALUE"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        || prevNode.getSelfPropsValue() != node.getSelfPropsValue();"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        || prevNode.getSelfPropsValue() != node.getSelfPropsValue();"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                node.getChildNodesValue() == DISCARDED_FINGERPRINT_VALUE"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        || prevNode.getChildNodesValue() != node.getChildNodesValue();"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        || prevNode.getChildNodesValue() != node.getChildNodesValue();"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        checkState(childList.size() == prevNodeFingerprint.getChildNodesCount());"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkState can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        checkState(childList.size() == prevNodeFingerprint.getChildNodesCount());"
+        errorLine2="        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodes can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            NodeFingerprint prevChildNodeFingerprint = prevNodeFingerprint.getChildNodes(i);"
+        errorLine2="                                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (layoutElement.getInnerCase()) {"
+        errorLine2="                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.BOX can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case BOX:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getBox().getContentsList(),"
+        errorLine2="                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getBox().getContentsList(),"
+        errorLine2="                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        fingerprint.getChildNodesList(),"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.COLUMN can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case COLUMN:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getColumn().getContentsList(),"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getColumn().getContentsList(),"
+        errorLine2="                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        fingerprint.getChildNodesList(),"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ROW can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ROW:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getRow().getContentsList(),"
+        errorLine2="                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getRow().getContentsList(),"
+        errorLine2="                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        fingerprint.getChildNodesList(),"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ARC can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getArc().getContentsList(),"
+        errorLine2="                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        layoutElement.getArc().getContentsList(),"
+        errorLine2="                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.getChildNodesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        fingerprint.getChildNodesList(),"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/common/ProtoLayoutDiffer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        checkNotNull(animatingNode.getValue()), associatedView);"
+        errorLine2="                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        checkNotNull(animatingNode.getValue()), associatedView);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.hasExitTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        &amp;&amp; animatedVisibility.hasExitTransition();"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.getExitTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(affectedNode.getAnimatedVisibility()).getExitTransition());"
+        errorLine2="                                                                           ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(affectedNode.getAnimatedVisibility()).getExitTransition());"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(affectedNode.getAnimatedVisibility()).getExitTransition());"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.hasEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                            &amp;&amp; animatedVisibility.hasEnterTransition();"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            checkNotNull(affectedNode.getAnimatedVisibility())"
+        errorLine2="                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            checkNotNull(affectedNode.getAnimatedVisibility())"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.getEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    .getEnterTransition());"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    checkNotNull(animatingNode.getValue()), associatedView);"
+        errorLine2="                                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    checkNotNull(animatingNode.getValue()), associatedView);"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            dpProp.getDynamicValue(), consumer);"
+        errorLine2="                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            degreesProp.getDynamicValue(), consumer);"
+        errorLine2="                                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            colorProp.getDynamicValue(), consumer);"
+        errorLine2="                                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_CONDITION_MET_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (trigger.getInnerCase() != Trigger.InnerCase.ON_CONDITION_MET_TRIGGER) {"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (trigger.getInnerCase() != Trigger.InnerCase.ON_CONDITION_MET_TRIGGER) {"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_VISIBLE_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            playAvdAnimations(Trigger.InnerCase.ON_VISIBLE_TRIGGER);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_VISIBLE_ONCE_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            playAvdAnimations(Trigger.InnerCase.ON_VISIBLE_ONCE_TRIGGER);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_LOAD_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        playAvdAnimations(Trigger.InnerCase.ON_LOAD_TRIGGER);"
+        errorLine2="                                            ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_VISIBLE_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            playAvdAnimations(Trigger.InnerCase.ON_VISIBLE_TRIGGER);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_VISIBLE_ONCE_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            playAvdAnimations(Trigger.InnerCase.ON_VISIBLE_ONCE_TRIGGER);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_VISIBLE_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            stopAvdAnimations(Trigger.InnerCase.ON_VISIBLE_TRIGGER);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_VISIBLE_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            resetAvdAnimations(Trigger.InnerCase.ON_VISIBLE_TRIGGER);"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/dynamicdata/ProtoLayoutDynamicDataPipeline.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOnLoadTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            Trigger.newBuilder().setOnLoadTrigger(OnLoadTrigger.getDefaultInstance()).build();"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OnLoadTrigger.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            Trigger.newBuilder().setOnLoadTrigger(OnLoadTrigger.getDefaultInstance()).build();"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            Trigger.newBuilder().setOnLoadTrigger(OnLoadTrigger.getDefaultInstance()).build();"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            ContainerDimension.newBuilder()"
+        errorLine2="                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    .setWrappedDimension(WrappedDimensionProp.getDefaultInstance())"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    .setWrappedDimension(WrappedDimensionProp.getDefaultInstance())"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        mChildLayoutParams.apply(checkNotNull(child.getLayoutParams())));"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        mChildLayoutParams.apply(checkNotNull(child.getLayoutParams())));"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(mLoadActionListener),"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(mLoadActionListener),"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(mProtoLayoutTheme),"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(mProtoLayoutTheme),"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(mClickableIdExtra),"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(mClickableIdExtra),"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return safeDpToPx(dpProp.getValue());"
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.getAspectRatioWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        final int dividend = proportionalDimensionProp.getAspectRatioWidth();"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.getAspectRatioHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        final int divisor = proportionalDimensionProp.getAspectRatioHeight();"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; width.getInnerCase() == InnerCase.EXPANDED_DIMENSION) {"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXPANDED_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; width.getInnerCase() == InnerCase.EXPANDED_DIMENSION) {"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float weight = width.getExpandedDimension().getLayoutWeight().getValue();"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedDimensionProp.getLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float weight = width.getExpandedDimension().getLayoutWeight().getValue();"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float weight = width.getExpandedDimension().getLayoutWeight().getValue();"
+        errorLine2="                                                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; height.getInnerCase() == InnerCase.EXPANDED_DIMENSION) {"
+        errorLine2="                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXPANDED_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; height.getInnerCase() == InnerCase.EXPANDED_DIMENSION) {"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float weight = height.getExpandedDimension().getLayoutWeight().getValue();"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedDimensionProp.getLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float weight = height.getExpandedDimension().getLayoutWeight().getValue();"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float weight = height.getExpandedDimension().getLayoutWeight().getValue();"
+        errorLine2="                                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (width.getWrappedDimension().hasMinimumSize()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.hasMinimumSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (width.getWrappedDimension().hasMinimumSize()) {"
+        errorLine2="                                        ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            view.setMinimumWidth(safeDpToPx(width.getWrappedDimension().getMinimumSize()));"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.getMinimumSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            view.setMinimumWidth(safeDpToPx(width.getWrappedDimension().getMinimumSize()));"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (height.getWrappedDimension().hasMinimumSize()) {"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.hasMinimumSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (height.getWrappedDimension().hasMinimumSize()) {"
+        errorLine2="                                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            view.setMinimumHeight(safeDpToPx(height.getWrappedDimension().getMinimumSize()));"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.getMinimumSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            view.setMinimumHeight(safeDpToPx(height.getWrappedDimension().getMinimumSize()));"
+        errorLine2="                                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.HORIZONTAL_ALIGN_START can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case HORIZONTAL_ALIGN_START:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.HORIZONTAL_ALIGN_CENTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case HORIZONTAL_ALIGN_CENTER:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.HORIZONTAL_ALIGN_END can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case HORIZONTAL_ALIGN_END:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.HORIZONTAL_ALIGN_LEFT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case HORIZONTAL_ALIGN_LEFT:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.HORIZONTAL_ALIGN_RIGHT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case HORIZONTAL_ALIGN_RIGHT:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.HORIZONTAL_ALIGN_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case HORIZONTAL_ALIGN_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_TOP can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_TOP:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_CENTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_CENTER:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_BOTTOM can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_BOTTOM:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (alignment.getValue()) {"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_TOP can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_TOP:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_CENTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_CENTER:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_BOTTOM can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_BOTTOM:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.VERTICAL_ALIGN_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VERTICAL_ALIGN_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.CONTENT_SCALE_MODE_FIT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case CONTENT_SCALE_MODE_FIT:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.CONTENT_SCALE_MODE_CROP can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case CONTENT_SCALE_MODE_CROP:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.CONTENT_SCALE_MODE_FILL_BOUNDS can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case CONTENT_SCALE_MODE_FILL_BOUNDS:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.CONTENT_SCALE_MODE_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case CONTENT_SCALE_MODE_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (alignment.getValue()) {"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.SPAN_VERTICAL_ALIGN_TEXT_BASELINE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPAN_VERTICAL_ALIGN_TEXT_BASELINE:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.SPAN_VERTICAL_ALIGN_BOTTOM can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPAN_VERTICAL_ALIGN_BOTTOM:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.SPAN_VERTICAL_ALIGN_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPAN_VERTICAL_ALIGN_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (fontStyle.getWeight().getValue()) {"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeightProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (fontStyle.getWeight().getValue()) {"
+        errorLine2="                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_BOLD can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_BOLD:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_NORMAL can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_NORMAL:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_MEDIUM can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_MEDIUM:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        FontSet fonts = mProtoLayoutTheme.getFontSet(fontStyle.getVariant().getValue().getNumber());"
+        errorLine2="                                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        FontSet fonts = mProtoLayoutTheme.getFontSet(fontStyle.getVariant().getValue().getNumber());"
+        errorLine2="                                                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariantProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        FontSet fonts = mProtoLayoutTheme.getFontSet(fontStyle.getVariant().getValue().getNumber());"
+        errorLine2="                                                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (fontStyle.getWeight().getValue()) {"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeightProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (fontStyle.getWeight().getValue()) {"
+        errorLine2="                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_BOLD can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_BOLD:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_MEDIUM can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_MEDIUM:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_NORMAL can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_NORMAL:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.FONT_WEIGHT_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case FONT_WEIGHT_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        final boolean isItalic = fontStyle.getItalic().getValue();"
+        errorLine2="                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        final boolean isItalic = fontStyle.getItalic().getValue();"
+        errorLine2="                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return !fontStyle.getItalic().getValue() &amp;&amp; !isBold(fontStyle);"
+        errorLine2="                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return !fontStyle.getItalic().getValue() &amp;&amp; !isBold(fontStyle);"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                spField.getValue(),"
+        errorLine2="                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (style.hasSize()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, style.getSize().getValue());"
+        errorLine2="                                                                   ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, style.getSize().getValue());"
+        errorLine2="                                                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (style.hasLetterSpacing()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EmProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            textView.setLetterSpacing(style.getLetterSpacing().getValue());"
+        errorLine2="                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            textView.setLetterSpacing(style.getLetterSpacing().getValue());"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (style.hasColor()) {"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            handleProp(style.getColor(), textView::setTextColor, posId, pipelineMaker);"
+        errorLine2="                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (style.hasSize()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            textView.setTextSize(toPx(style.getSize()));"
+        errorLine2="                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        view.setTag(R.id.clickable_id_tag, clickable.getId());"
+        errorLine2="                                                     ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getValueCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (clickable.getOnClick().getValueCase()) {"
+        errorLine2="                                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (clickable.getOnClick().getValueCase()) {"
+        errorLine2="                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.LAUNCH_ACTION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case LAUNCH_ACTION:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                clickable.getOnClick().getLaunchAction(),"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                clickable.getOnClick().getLaunchAction(),"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                clickable.getId(),"
+        errorLine2="                                          ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.LOAD_ACTION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case LOAD_ACTION:"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                checkNotNull(mLoadActionExecutor)"
+        errorLine2="                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                checkNotNull(mLoadActionExecutor)"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                                                                .getOnClick()"
+        errorLine2="                                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                                                                .getLoadAction(),"
+        errorLine2="                                                                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                                                        clickable.getId()))));"
+        errorLine2="                                                                                  ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.VALUE_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case VALUE_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (padding.getRtlAware().getValue()) {"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (padding.getRtlAware().getValue()) {"
+        errorLine2="                    ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getStart()),"
+        errorLine2="                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getTop()),"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getEnd()),"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getBottom()));"
+        errorLine2="                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getStart()),"
+        errorLine2="                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getTop()),"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getEnd()),"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    safeDpToPx(padding.getBottom()));"
+        errorLine2="                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (background.hasColor()) {"
+        errorLine2="                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            handleProp(background.getColor(), drawable::setColor, posId, pipelineMaker);"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.hasCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (background.hasCorner()) {"
+        errorLine2="                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.getCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            final int radiusPx = safeDpToPx(background.getCorner().getRadius());"
+        errorLine2="                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Corner.getRadius can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            final int radiusPx = safeDpToPx(background.getCorner().getRadius());"
+        errorLine2="                                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int width = safeDpToPx(border.getWidth());"
+        errorLine2="                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                border.getColor(),"
+        errorLine2="                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applyClickable(view, modifiers.getClickable());"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasSemantics()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applySemantics(view, modifiers.getSemantics(), posId, pipelineMaker);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasPadding()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applyPadding(view, modifiers.getPadding());"
+        errorLine2="                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasBackground()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            modifiers.getBackground(),"
+        errorLine2="                                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasBorder()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    applyBorder(modifiers.getBorder(), backgroundDrawable, posId, pipelineMaker);"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasContentUpdateAnimation can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (mAnimationEnabled &amp;&amp; modifiers.hasContentUpdateAnimation()) {"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getContentUpdateAnimation can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    posId, modifiers.getContentUpdateAnimation()));"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.hasFadeIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (enterTransition.hasFadeIn()) {"
+        errorLine2="                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.getFadeIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            FadeInTransition fadeIn = enterTransition.getFadeIn();"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeInTransition.getInitialAlpha can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    new AlphaAnimation(fadeIn.getInitialAlpha(), FADE_IN_TARGET_ALPHA);"
+        errorLine2="                                              ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeInTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            AnimationSpec spec = fadeIn.getAnimationSpec();"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.hasSlideIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (enterTransition.hasSlideIn()) {"
+        errorLine2="                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.getSlideIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            SlideInTransition slideIn = enterTransition.getSlideIn();"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            AnimationSpec spec = slideIn.getAnimationSpec();"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getDirectionValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideIn.getDirectionValue()) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_UNDEFINED_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case SlideDirection.SLIDE_DIRECTION_UNDEFINED_VALUE:"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE:"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_RIGHT_TO_LEFT_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case SlideDirection.SLIDE_DIRECTION_RIGHT_TO_LEFT_VALUE:"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE:"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_BOTTOM_TO_TOP_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case SlideDirection.SLIDE_DIRECTION_BOTTOM_TO_TOP_VALUE:"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.hasFadeOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (exitTransition.hasFadeOut()) {"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.getFadeOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            FadeOutTransition fadeOut = exitTransition.getFadeOut();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeOutTransition.getTargetAlpha can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    new AlphaAnimation(FADE_OUT_INITIAL_ALPHA, fadeOut.getTargetAlpha());"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeOutTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            AnimationSpec spec = fadeOut.getAnimationSpec();"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.hasSlideOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (exitTransition.hasSlideOut()) {"
+        errorLine2="                           ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.getSlideOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            SlideOutTransition slideOut = exitTransition.getSlideOut();"
+        errorLine2="                                                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            AnimationSpec spec = slideOut.getAnimationSpec();"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getDirectionValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                switch (slideOut.getDirectionValue()) {"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_UNDEFINED_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case SlideDirection.SLIDE_DIRECTION_UNDEFINED_VALUE:"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE:"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_RIGHT_TO_LEFT_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case SlideDirection.SLIDE_DIRECTION_RIGHT_TO_LEFT_VALUE:"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE:"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_BOTTOM_TO_TOP_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case SlideDirection.SLIDE_DIRECTION_BOTTOM_TO_TOP_VALUE:"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideIn.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getDirectionValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideIn.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.hasInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (slideIn.hasInitialSlideBound()) {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideIn.getInitialSlideBound().getInnerCase()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideIn.getInitialSlideBound().getInnerCase()) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case LINEAR_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getLinearBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideIn.getInitialSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideIn.getInitialSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideLinearBound.getOffsetDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideIn.getInitialSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                                           ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PARENT_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case PARENT_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getParentBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideIn.getInitialSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideIn.getInitialSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentBound.getSnapTo can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideIn.getInitialSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            == SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE) {"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case INNER_NOT_SET:"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideIn.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getDirectionValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideIn.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.hasInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (slideIn.hasInitialSlideBound()) {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideIn.getInitialSlideBound().getInnerCase()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideIn.getInitialSlideBound().getInnerCase()) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case LINEAR_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getLinearBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideIn.getInitialSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideIn.getInitialSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideLinearBound.getOffsetDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideIn.getInitialSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                                           ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PARENT_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case PARENT_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getParentBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideIn.getInitialSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideIn.getInitialSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentBound.getSnapTo can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideIn.getInitialSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            == SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE) {"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case INNER_NOT_SET:"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideOut.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getDirectionValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideOut.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_LEFT_TO_RIGHT_VALUE"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.hasTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (slideOut.hasTargetSlideBound()) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideOut.getTargetSlideBound().getInnerCase()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideOut.getTargetSlideBound().getInnerCase()) {"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case LINEAR_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getLinearBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideOut.getTargetSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideLinearBound.getOffsetDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideOut.getTargetSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                                           ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideOut.getTargetSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PARENT_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case PARENT_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getParentBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideOut.getTargetSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideOut.getTargetSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentBound.getSnapTo can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideOut.getTargetSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            == SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE) {"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case INNER_NOT_SET:"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideOut.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getDirectionValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                slideOut.getDirectionValue() == SlideDirection.SLIDE_DIRECTION_TOP_TO_BOTTOM_VALUE"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.hasTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (slideOut.hasTargetSlideBound()) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideOut.getTargetSlideBound().getInnerCase()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (slideOut.getTargetSlideBound().getInnerCase()) {"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case LINEAR_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getLinearBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideOut.getTargetSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideLinearBound.getOffsetDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideOut.getTargetSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                                                           ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return slideOut.getTargetSlideBound().getLinearBound().getOffsetDp() * sign;"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PARENT_BOUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case PARENT_BOUND:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getParentBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideOut.getTargetSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideOut.getTargetSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentBound.getSnapTo can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (slideOut.getTargetSlideBound().getParentBound().getSnapTo()"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            == SlideParentSnapOption.SLIDE_PARENT_SNAP_TO_OUTSIDE) {"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case INNER_NOT_SET:"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applyClickable(view, modifiers.getClickable());"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.hasSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasSemantics()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.getSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applySemantics(view, modifiers.getSemantics(), posId, pipelineMaker);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.TEXT_ALIGN_START can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_ALIGN_START:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.TEXT_ALIGN_CENTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_ALIGN_CENTER:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.TEXT_ALIGN_END can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_ALIGN_END:"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.TEXT_ALIGN_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_ALIGN_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.TEXT_OVERFLOW_TRUNCATE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_OVERFLOW_TRUNCATE:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.TEXT_OVERFLOW_ELLIPSIZE_END can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_OVERFLOW_ELLIPSIZE_END:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.TEXT_OVERFLOW_MARQUEE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_OVERFLOW_MARQUEE:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.TEXT_OVERFLOW_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT_OVERFLOW_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.ARC_ANCHOR_START can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC_ANCHOR_START:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.ARC_ANCHOR_CENTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC_ANCHOR_CENTER:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.ARC_ANCHOR_END can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC_ANCHOR_END:"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.ARC_ANCHOR_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC_ANCHOR_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AngularAlignment.ANGULAR_ALIGNMENT_START can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ANGULAR_ALIGNMENT_START:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AngularAlignment.ANGULAR_ALIGNMENT_CENTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ANGULAR_ALIGNMENT_CENTER:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AngularAlignment.ANGULAR_ALIGNMENT_END can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ANGULAR_ALIGNMENT_END:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AngularAlignment.ANGULAR_ALIGNMENT_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ANGULAR_ALIGNMENT_UNDEFINED:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AngularAlignment.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case UNRECOGNIZED:"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (containerDimension.getInnerCase()) {"
+        errorLine2="                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case LINEAR_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return safeDpToPx(containerDimension.getLinearDimension());"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXPANDED_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case EXPANDED_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.WRAPPED_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case WRAPPED_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (fontStyle.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return fontStyle.getColor().getArgb();"
+        errorLine2="                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return fontStyle.getColor().getArgb();"
+        errorLine2="                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.hasAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (launchAction.hasAndroidActivity()) {"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.getAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            AndroidActivity activity = launchAction.getAndroidActivity();"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getClassName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    new Intent().setClassName(activity.getPackageName(), activity.getClassName());"
+        errorLine2="                                                                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getPackageName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    new Intent().setClassName(activity.getPackageName(), activity.getClassName());"
+        errorLine2="                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getKeyToExtraMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (Map.Entry&lt;String, AndroidExtra> entry : activity.getKeyToExtraMap().entrySet()) {"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (entry.getValue().hasStringVal()) {"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getStringVal().getValue());"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidStringExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getStringVal().getValue());"
+        errorLine2="                                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                } else if (entry.getValue().hasIntVal()) {"
+        errorLine2="                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getIntVal().getValue());"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidIntExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getIntVal().getValue());"
+        errorLine2="                                                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                } else if (entry.getValue().hasLongVal()) {"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getLongVal().getValue());"
+        errorLine2="                                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidLongExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getLongVal().getValue());"
+        errorLine2="                                                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                } else if (entry.getValue().hasDoubleVal()) {"
+        errorLine2="                                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidDoubleExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getDoubleVal().getValue());"
+        errorLine2="                                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getDoubleVal().getValue());"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                } else if (entry.getValue().hasBooleanVal()) {"
+        errorLine2="                                            ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidBooleanExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getBooleanVal().getValue());"
+        errorLine2="                                                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    i.putExtra(entry.getKey(), entry.getValue().getBooleanVal().getValue());"
+        errorLine2="                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLastClickableId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return loadAction.getRequestState().toBuilder().setLastClickableId(clickableId).build();"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LoadAction.getRequestState can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return loadAction.getRequestState().toBuilder().setLastClickableId(clickableId).build();"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                column.hasWidth() ? column.getWidth() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                column.hasWidth() ? column.getWidth() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                column.hasHeight() ? column.getHeight() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                column.hasHeight() ? column.getHeight() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!canMeasureContainer(width, height, column.getContentsList())) {"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                horizontalAlignmentToGravity(column.getHorizontalAlignment().getValue()));"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                horizontalAlignmentToGravity(column.getHorizontalAlignment().getValue()));"
+        errorLine2="                                                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                applyModifiers(linearLayout, column.getModifiers(), columnPosId, pipelineMaker);"
+        errorLine2="                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    column.getContentsList(),"
+        errorLine2="                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getContentsCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int numMissingChildren = includeChildren ? 0 : column.getContentsCount();"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension width = row.hasWidth() ? row.getWidth() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension width = row.hasWidth() ? row.getWidth() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension height = row.hasHeight() ? row.getHeight() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension height = row.hasHeight() ? row.getHeight() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!canMeasureContainer(width, height, row.getContentsList())) {"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        linearLayout.setGravity(verticalAlignmentToGravity(row.getVerticalAlignment().getValue()));"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        linearLayout.setGravity(verticalAlignmentToGravity(row.getVerticalAlignment().getValue()));"
+        errorLine2="                                                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                applyModifiers(linearLayout, row.getModifiers(), rowPosId, pipelineMaker);"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    row.getContentsList(),"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getContentsCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int numMissingChildren = includeChildren ? 0 : row.getContentsCount();"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension width = box.hasWidth() ? box.getWidth() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension width = box.hasWidth() ? box.getWidth() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension height = box.hasHeight() ? box.getHeight() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        ContainerDimension height = box.hasHeight() ? box.getHeight() : CONTAINER_DIMENSION_DEFAULT;"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!canMeasureContainer(width, height, box.getContentsList())) {"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        box.getHorizontalAlignment().getValue(),"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        box.getHorizontalAlignment().getValue(),"
+        errorLine2="                                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        box.getVerticalAlignment().getValue());"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        box.getVerticalAlignment().getValue());"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        View wrappedView = applyModifiers(frame, box.getModifiers(), boxPosId, pipelineMaker);"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    box.getContentsList(),"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getContentsCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int numMissingChildren = includeChildren ? 0 : box.getContentsCount();"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (needsSizeWrapper(spacer.getWidth()) || needsSizeWrapper(spacer.getHeight())) {"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (needsSizeWrapper(spacer.getWidth()) || needsSizeWrapper(spacer.getHeight())) {"
+        errorLine2="                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (spacer.getWidth().getLinearDimension().hasDynamicValue()) {"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (spacer.getWidth().getLinearDimension().hasDynamicValue()) {"
+        errorLine2="                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (spacer.getWidth().getLinearDimension().hasDynamicValue()) {"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float widthForLayout = spacer.getWidth().getLinearDimension().getValueForLayout();"
+        errorLine2="                                                                              ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float widthForLayout = spacer.getWidth().getLinearDimension().getValueForLayout();"
+        errorLine2="                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float widthForLayout = spacer.getWidth().getLinearDimension().getValueForLayout();"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (spacer.getHeight().getLinearDimension().hasDynamicValue()) {"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (spacer.getHeight().getLinearDimension().hasDynamicValue()) {"
+        errorLine2="                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (spacer.getHeight().getLinearDimension().hasDynamicValue()) {"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float heightForLayout = spacer.getHeight().getLinearDimension().getValueForLayout();"
+        errorLine2="                                                                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float heightForLayout = spacer.getHeight().getLinearDimension().getValueForLayout();"
+        errorLine2="                                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                float heightForLayout = spacer.getHeight().getLinearDimension().getValueForLayout();"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    spacer.getWidth()"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                            .getLinearDimension()"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getHorizontalAlignmentForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                            .getHorizontalAlignmentForLayout())"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    spacer.getHeight()"
+        errorLine2="                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                            .getLinearDimension()"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getVerticalAlignmentForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                            .getVerticalAlignmentForLayout());"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (spacer.hasModifiers()) {"
+        errorLine2="                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            new View(mUiContext), spacer.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getWidth().getLinearDimension(),"
+        errorLine2="                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getWidth().getLinearDimension(),"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getHeight().getLinearDimension(),"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getHeight().getLinearDimension(),"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getWidth().getLinearDimension(),"
+        errorLine2="                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getWidth().getLinearDimension(),"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getHeight().getLinearDimension(),"
+        errorLine2="                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    spacer.getHeight().getLinearDimension(),"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int thicknessPx = safeDpToPx(spacer.getThickness());"
+        errorLine2="                                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.hasAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (spacer.hasAngularLength()) {"
+        errorLine2="                   ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            final ArcSpacerLength angularLength = spacer.getAngularLength();"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacerLength.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (angularLength.getInnerCase()) {"
+        errorLine2="                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.DEGREES can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case DEGREES:"
+        errorLine2="                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacerLength.getDegrees can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    lengthDegrees = max(0, angularLength.getDegrees().getValue());"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    lengthDegrees = max(0, angularLength.getDegrees().getValue());"
+        errorLine2="                                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXPANDED_ANGULAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case EXPANDED_ANGULAR_DIMENSION:"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacerLength.getExpandedAngularDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        .getExpandedAngularDimension()"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedAngularDimensionProp.getLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        .getLayoutWeight()"
+        errorLine2="                                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        .getValue();"
+        errorLine2="                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        space, spacer.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case INNER_NOT_SET:"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            lengthDegrees = max(0, spacer.getLength().getValue());"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            lengthDegrees = max(0, spacer.getLength().getValue());"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                applyModifiersToArcLayoutView(space, spacer.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflowProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        TextOverflow overflowValue = overflow.getValue();"
+        errorLine2="                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.TEXT_OVERFLOW_MARQUEE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!mAnimationEnabled &amp;&amp; overflowValue == TextOverflow.TEXT_OVERFLOW_MARQUEE) {"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.TEXT_OVERFLOW_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            overflowValue = TextOverflow.TEXT_OVERFLOW_UNDEFINED;"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.TEXT_OVERFLOW_MARQUEE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (overflowValue == TextOverflow.TEXT_OVERFLOW_MARQUEE &amp;&amp; textView.getMaxLines() == 1) {"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.hasIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    marqueeParameters.hasIterations()"
+        errorLine2="                                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.getIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            ? marqueeParameters.getIterations()"
+        errorLine2="                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        boolean needsSizeWrapper = needsSizeWrapper(text.getText());"
+        errorLine2="                                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                text.getText(),"
+        errorLine2="                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (text.getFontStyle().getUnderline().getValue()) {"
+        errorLine2="                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (text.getFontStyle().getUnderline().getValue()) {"
+        errorLine2="                                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (text.getFontStyle().getUnderline().getValue()) {"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        textView.setGravity(textAlignToAndroidGravity(text.getMultilineAlignment().getValue()));"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        textView.setGravity(textAlignToAndroidGravity(text.getMultilineAlignment().getValue()));"
+        errorLine2="                                                                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (text.hasMaxLines() &amp;&amp; !needsSizeWrapper) {"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            textView.setMaxLines(max(TEXT_MIN_LINES, text.getMaxLines().getValue()));"
+        errorLine2="                                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            textView.setMaxLines(max(TEXT_MIN_LINES, text.getMaxLines().getValue()));"
+        errorLine2="                                                          ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMarqueeParameters can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        applyTextOverflow(textView, text.getOverflow(), text.getMarqueeParameters());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        applyTextOverflow(textView, text.getOverflow(), text.getMarqueeParameters());"
+        errorLine2="                                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (text.hasFontStyle()) {"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applyFontStyle(text.getFontStyle(), textView, posId, pipelineMaker);"
+        errorLine2="                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applyFontStyle(FontStyle.getDefaultInstance(), textView, posId, pipelineMaker);"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (text.hasAndroidTextStyle()) {"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidTextStyle.getExcludeFontPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            excludeFontPadding = text.getAndroidTextStyle().getExcludeFontPadding();"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            excludeFontPadding = text.getAndroidTextStyle().getExcludeFontPadding();"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (text.hasLineHeight()) {"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            float lineHeightPx = toPx(text.getLineHeight());"
+        errorLine2="                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        View wrappedView = applyModifiers(textView, text.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            String valueForLayout = text.getText().getValueForLayout();"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            String valueForLayout = text.getText().getValueForLayout();"
+        errorLine2="                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getTextAlignmentForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            int gravity = textAlignToAndroidGravity(text.getText().getTextAlignmentForLayout());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            int gravity = textAlignToAndroidGravity(text.getText().getTextAlignmentForLayout());"
+        errorLine2="                                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        textView.setText(text.getText().getValue());"
+        errorLine2="                              ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        textView.setText(text.getText().getValue());"
+        errorLine2="                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (text.hasFontStyle()) {"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            applyFontStyle(text.getFontStyle(), textView);"
+        errorLine2="                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        textView.setTextColor(extractTextColorArgb(text.getFontStyle()));"
+        errorLine2="                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                applyModifiersToArcLayoutView(textView, text.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return dimension.getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        return dimension.getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; dimension.getLinearDimension().getValue() == 0;"
+        errorLine2="                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; dimension.getLinearDimension().getValue() == 0;"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (dimension.getInnerCase()) {"
+        errorLine2="                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case LINEAR_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ContainerDimension.newBuilder()"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        .setLinearDimension(dimension.getLinearDimension())"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        .setLinearDimension(dimension.getLinearDimension())"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXPANDED_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case EXPANDED_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ContainerDimension.newBuilder()"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        .setExpandedDimension(ExpandedDimensionProp.getDefaultInstance())"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedDimensionProp.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        .setExpandedDimension(ExpandedDimensionProp.getDefaultInstance())"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PROPORTIONAL_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case PROPORTIONAL_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ContainerDimension.newBuilder()"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        .setWrappedDimension(WrappedDimensionProp.getDefaultInstance())"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        .setWrappedDimension(WrappedDimensionProp.getDefaultInstance())"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &quot;ImageDimension has an unknown dimension type: &quot; + dimension.getInnerCase().name());"
+        errorLine2="                                                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        String protoResId = image.getResourceId().getValue();"
+        errorLine2="                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        String protoResId = image.getResourceId().getValue();"
+        errorLine2="                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.INNER_NOT_SET"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.INNER_NOT_SET"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.INNER_NOT_SET"
+        errorLine2="                                                                        ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || image.getHeight().getInnerCase() == ImageDimension.InnerCase.INNER_NOT_SET) {"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || image.getHeight().getInnerCase() == ImageDimension.InnerCase.INNER_NOT_SET) {"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || image.getHeight().getInnerCase() == ImageDimension.InnerCase.INNER_NOT_SET) {"
+        errorLine2="                                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (isZeroLengthImageDimension(image.getWidth())"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || isZeroLengthImageDimension(image.getHeight())) {"
+        errorLine2="                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PROPORTIONAL_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; image.getHeight().getInnerCase()"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                &amp;&amp; image.getHeight().getInnerCase()"
+        errorLine2="                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PROPORTIONAL_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION) {"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION) {"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION) {"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PROPORTIONAL_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION) {"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            ratio = safeAspectRatioOrNull(image.getWidth().getProportionalDimension());"
+        errorLine2="                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            ratio = safeAspectRatioOrNull(image.getWidth().getProportionalDimension());"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getHeight().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getHeight().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION) {"
+        errorLine2="                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PROPORTIONAL_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getHeight().getInnerCase() == ImageDimension.InnerCase.PROPORTIONAL_DIMENSION) {"
+        errorLine2="                                                                         ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            ratio = safeAspectRatioOrNull(image.getHeight().getProportionalDimension());"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            ratio = safeAspectRatioOrNull(image.getHeight().getProportionalDimension());"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.hasContentScaleMode()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleModeProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    contentScaleModeToScaleType(image.getContentScaleMode().getValue()));"
+        errorLine2="                                                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    contentScaleModeToScaleType(image.getContentScaleMode().getValue()));"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION) {"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION) {"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getWidth().getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION) {"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            imageView.setMinimumWidth(safeDpToPx(image.getWidth().getLinearDimension()));"
+        errorLine2="                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            imageView.setMinimumWidth(safeDpToPx(image.getWidth().getLinearDimension()));"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getHeight().getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getHeight().getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION) {"
+        errorLine2="                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getHeight().getInnerCase() == ImageDimension.InnerCase.LINEAR_DIMENSION) {"
+        errorLine2="                                                                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            imageView.setMinimumHeight(safeDpToPx(image.getHeight().getLinearDimension()));"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            imageView.setMinimumHeight(safeDpToPx(image.getHeight().getLinearDimension()));"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        imageDimensionToContainerDimension(image.getWidth()),"
+        errorLine2="                                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        imageDimensionToContainerDimension(image.getHeight()));"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                applyModifiers(imageView, image.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            &amp;&amp; trigger.getInnerCase()"
+        errorLine2="                                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ON_CONDITION_MET_TRIGGER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    == Trigger.InnerCase.ON_CONDITION_MET_TRIGGER) {"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getOnConditionMetTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        OnConditionMetTrigger conditionTrigger = trigger.getOnConditionMetTrigger();"
+        errorLine2="                                                                         ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OnConditionMetTrigger.getCondition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        avd, trigger, posId, conditionTrigger.getCondition());"
+        errorLine2="                                                                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                || trigger.getInnerCase() == Trigger.InnerCase.INNER_NOT_SET) {"
+        errorLine2="                                                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                || trigger.getInnerCase() == Trigger.InnerCase.INNER_NOT_SET) {"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.hasTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getColorFilter().hasTint() &amp;&amp; canImageBeTinted) {"
+        errorLine2="                                   ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (image.getColorFilter().hasTint() &amp;&amp; canImageBeTinted) {"
+        errorLine2="                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.getTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    image.getColorFilter().getTint(),"
+        errorLine2="                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    image.getColorFilter().getTint(),"
+        errorLine2="                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (line.hasAngularLength()) {"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (line.getAngularLength().getInnerCase() == ArcLineLength.InnerCase.DEGREES) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLineLength.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (line.getAngularLength().getInnerCase() == ArcLineLength.InnerCase.DEGREES) {"
+        errorLine2="                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.DEGREES can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (line.getAngularLength().getInnerCase() == ArcLineLength.InnerCase.DEGREES) {"
+        errorLine2="                                                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                lengthDegrees = max(0, line.getAngularLength().getDegrees().getValue());"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLineLength.getDegrees can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                lengthDegrees = max(0, line.getAngularLength().getDegrees().getValue());"
+        errorLine2="                                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                lengthDegrees = max(0, line.getAngularLength().getDegrees().getValue());"
+        errorLine2="                                                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            lengthDegrees = max(0, line.getLength().getValue());"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            lengthDegrees = max(0, line.getLength().getValue());"
+        errorLine2="                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int thicknessPx = safeDpToPx(line.getThickness());"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (line.hasColor()) {"
+        errorLine2="                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            handleProp(line.getColor(), lineView::setColor, posId, pipelineMaker);"
+        errorLine2="                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasStrokeCap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (line.hasStrokeCap()) {"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getStrokeCap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (line.getStrokeCap().getValue()) {"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCapProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (line.getStrokeCap().getValue()) {"
+        errorLine2="                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCap.STROKE_CAP_BUTT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case STROKE_CAP_BUTT:"
+        errorLine2="                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCap.STROKE_CAP_ROUND can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case STROKE_CAP_ROUND:"
+        errorLine2="                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCap.STROKE_CAP_SQUARE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case STROKE_CAP_SQUARE:"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCap.UNRECOGNIZED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case UNRECOGNIZED:"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCap.STROKE_CAP_UNDEFINED can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case STROKE_CAP_UNDEFINED:"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (line.hasAngularLength()) {"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            final ArcLineLength angularLength = line.getAngularLength();"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLineLength.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (angularLength.getInnerCase()) {"
+        errorLine2="                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.DEGREES can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case DEGREES:"
+        errorLine2="                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getAngularLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    length = line.getAngularLength().getDegrees();"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLineLength.getDegrees can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    length = line.getAngularLength().getDegrees();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXPANDED_ANGULAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case EXPANDED_ANGULAR_DIMENSION:"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLineLength.getExpandedAngularDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                angularLength.getExpandedAngularDimension();"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedAngularDimensionProp.hasLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                expandedAngularDimension.hasLayoutWeight()"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedAngularDimensionProp.getLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        ? expandedAngularDimension.getLayoutWeight().getValue()"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        ? expandedAngularDimension.getLayoutWeight().getValue()"
+        errorLine2="                                                                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        length = DegreesProp.getDefaultInstance();"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    length = DegreesProp.getDefaultInstance();"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            length = line.getLength();"
+        errorLine2="                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                getSizeForLayout(line.getLength(), WearCurvedLineView.SWEEP_ANGLE_WRAP_LENGTH);"
+        errorLine2="                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getAngularAlignmentForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    angularAlignmentProtoToAngularAlignment(length.getAngularAlignmentForLayout()));"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                applyModifiersToArcLayoutView(lineView, line.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                arc.getAnchorAngle(),"
+        errorLine2="                    ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        arcLayout.setAnchorAngleDegrees(arc.getAnchorAngle().getValue());"
+        errorLine2="                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        arcLayout.setAnchorAngleDegrees(arc.getAnchorAngle().getValue());"
+        errorLine2="                                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        arcLayout.setAnchorType(anchorTypeToAnchorPos(arc.getAnchorType().getValue()));"
+        errorLine2="                                                          ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorTypeProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        arcLayout.setAnchorType(anchorTypeToAnchorPos(arc.getAnchorType().getValue()));"
+        errorLine2="                                                                          ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasMaxAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (arc.hasMaxAngle()) {"
+        errorLine2="                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getMaxAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            arcLayout.setMaxAngleDegrees(arc.getMaxAngle().getValue());"
+        errorLine2="                                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            arcLayout.setMaxAngleDegrees(arc.getMaxAngle().getValue());"
+        errorLine2="                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (ArcLayoutElement child : arc.getContentsList()) {"
+        errorLine2="                                              ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (child.hasAdapter()) {"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.getRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        rotate = child.getAdapter().getRotateContents().getValue();"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        rotate = child.getAdapter().getRotateContents().getValue();"
+        errorLine2="                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        rotate = child.getAdapter().getRotateContents().getValue();"
+        errorLine2="                                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            verticalAlignmentToArcVAlign(arc.getVerticalAlign()));"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        View wrappedView = applyModifiers(arcLayout, arc.getModifiers(), arcPosId, pipelineMaker);"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getContentsCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int numMissingChildren = includeChildren ? 0 : arc.getContentsCount();"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (fontStyle.hasSize()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            AbsoluteSizeSpan span = new AbsoluteSizeSpan(round(toPx(fontStyle.getSize())));"
+        errorLine2="                                                                              ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (fontStyle.hasWeight() || fontStyle.hasVariant()) {"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (fontStyle.hasWeight() || fontStyle.hasVariant()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (fontStyle.getUnderline().getValue()) {"
+        errorLine2="                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (fontStyle.getUnderline().getValue()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (fontStyle.hasLetterSpacing()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EmProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            LetterSpacingSpan span = new LetterSpacingSpan(fontStyle.getLetterSpacing().getValue());"
+        errorLine2="                                                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            LetterSpacingSpan span = new LetterSpacingSpan(fontStyle.getLetterSpacing().getValue());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (modifiers.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            ClickableSpan clickableSpan = new ProtoLayoutClickableSpan(modifiers.getClickable());"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int lastPos = currentPos + text.getText().getValue().length();"
+        errorLine2="                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int lastPos = currentPos + text.getText().getValue().length();"
+        errorLine2="                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        builder.append(text.getText().getValue());"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        builder.append(text.getText().getValue());"
+        errorLine2="                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        applyStylesToSpan(builder, currentPos, lastPos, text.getFontStyle());"
+        errorLine2="                                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        applyModifiersToSpan(builder, currentPos, lastPos, text.getModifiers());"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        String protoResId = protoImage.getResourceId().getValue();"
+        errorLine2="                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        String protoResId = protoImage.getResourceId().getValue();"
+        errorLine2="                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (protoImage.getWidth().getValue() == 0 || protoImage.getHeight().getValue() == 0) {"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (protoImage.getWidth().getValue() == 0 || protoImage.getHeight().getValue() == 0) {"
+        errorLine2="                                                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (protoImage.getWidth().getValue() == 0 || protoImage.getHeight().getValue() == 0) {"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (protoImage.getWidth().getValue() == 0 || protoImage.getHeight().getValue() == 0) {"
+        errorLine2="                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                + protoImage.getResourceId().getValue());"
+        errorLine2="                                             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                + protoImage.getResourceId().getValue());"
+        errorLine2="                                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                0, 0, safeDpToPx(protoImage.getWidth()), safeDpToPx(protoImage.getHeight()));"
+        errorLine2="                                                                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                0, 0, safeDpToPx(protoImage.getWidth()), safeDpToPx(protoImage.getHeight()));"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        spanVerticalAlignmentToImgSpanAlignment(protoImage.getAlignment()));"
+        errorLine2="                                                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        applyModifiersToSpan(builder, startPos, endPos, protoImage.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        final String protoResourceId = protoImage.getResourceId().getValue();"
+        errorLine2="                                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        final String protoResourceId = protoImage.getResourceId().getValue();"
+        errorLine2="                                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    0, 0, safeDpToPx(protoImage.getWidth()), safeDpToPx(protoImage.getHeight()));"
+        errorLine2="                                                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    0, 0, safeDpToPx(protoImage.getWidth()), safeDpToPx(protoImage.getHeight()));"
+        errorLine2="                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            spanVerticalAlignmentToImgSpanAlignment(protoImage.getAlignment()));"
+        errorLine2="                                                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getSpansList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        for (Span element : spannable.getSpansList()) {"
+        errorLine2="                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (element.getInnerCase()) {"
+        errorLine2="                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.IMAGE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case IMAGE:"
+        errorLine2="                     ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    SpanImage protoImage = element.getImage();"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (protoImage.getModifiers().hasClickable()) {"
+        errorLine2="                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (protoImage.getModifiers().hasClickable()) {"
+        errorLine2="                                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.TEXT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case TEXT:"
+        errorLine2="                     ~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    SpanText protoText = element.getText();"
+        errorLine2="                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (protoText.getModifiers().hasClickable()) {"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (protoText.getModifiers().hasClickable()) {"
+        errorLine2="                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (protoText.hasAndroidTextStyle()"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidTextStyle.getExcludeFontPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            &amp;&amp; protoText.getAndroidTextStyle().getExcludeFontPadding()) {"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            &amp;&amp; protoText.getAndroidTextStyle().getExcludeFontPadding()) {"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        tv.setGravity(horizontalAlignmentToGravity(spannable.getMultilineAlignment().getValue()));"
+        errorLine2="                                                                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        tv.setGravity(horizontalAlignmentToGravity(spannable.getMultilineAlignment().getValue()));"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (spannable.hasMaxLines()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            tv.setMaxLines(max(TEXT_MIN_LINES, spannable.getMaxLines().getValue()));"
+        errorLine2="                                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            tv.setMaxLines(max(TEXT_MIN_LINES, spannable.getMaxLines().getValue()));"
+        errorLine2="                                                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMarqueeParameters can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        applyTextOverflow(tv, spannable.getOverflow(), spannable.getMarqueeParameters());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        applyTextOverflow(tv, spannable.getOverflow(), spannable.getMarqueeParameters());"
+        errorLine2="                                        ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (spannable.hasLineHeight()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    new StandardLineHeightSpan((int) toPx(spannable.getLineHeight()));"
+        errorLine2="                                                                    ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasLineSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        } else if (spannable.hasLineSpacing()) {"
+        errorLine2="                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getLineSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            tv.setLineSpacing(toPx(spannable.getLineSpacing()), 1f);"
+        errorLine2="                                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        View wrappedView = applyModifiers(tv, spannable.getModifiers(), posId, pipelineMaker);"
+        errorLine2="                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (element.getInnerCase()) {"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ADAPTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ADAPTER:"
+        errorLine2="                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.getContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                element.getAdapter().getContent(),"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                element.getAdapter().getContent(),"
+        errorLine2="                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPACER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPACER:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                parentViewWrapper, element.getSpacer(), nodePosId, pipelineMaker);"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case LINE:"
+        errorLine2="                 ~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getLine can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                parentViewWrapper, element.getLine(), nodePosId, pipelineMaker);"
+        errorLine2="                                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.TEXT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT:"
+        errorLine2="                 ~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                parentViewWrapper, element.getText(), nodePosId, pipelineMaker);"
+        errorLine2="                                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            Log.w(TAG, &quot;No node ID for &quot; + element.getInnerCase().name());"
+        errorLine2="                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (element.getInnerCase()) {"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.COLUMN can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case COLUMN:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                element.getColumn(),"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ROW can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ROW:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                element.getRow(),"
+        errorLine2="                                        ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.BOX can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case BOX:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                element.getBox(),"
+        errorLine2="                                        ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPACER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPACER:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                parentViewWrapper, element.getSpacer(), nodePosId, pipelineMaker);"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.TEXT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT:"
+        errorLine2="                 ~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        inflateText(parentViewWrapper, element.getText(), nodePosId, pipelineMaker);"
+        errorLine2="                                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.IMAGE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case IMAGE:"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                parentViewWrapper, element.getImage(), nodePosId, pipelineMaker);"
+        errorLine2="                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ARC can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                element.getArc(),"
+        errorLine2="                                        ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPANNABLE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPANNABLE:"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                element.getSpannable(),"
+        errorLine2="                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXTENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case EXTENSION:"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getExtension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    inflatedView = inflateExtension(parentViewWrapper, element.getExtension());"
+        errorLine2="                                                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                Log.w(TAG, &quot;Unknown child type: &quot; + element.getInnerCase().name());"
+        errorLine2="                                                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            Log.w(TAG, &quot;Error inflating &quot; + element.getInnerCase().name());"
+        errorLine2="                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            Log.w(TAG, &quot;No node ID for &quot; + element.getInnerCase().name());"
+        errorLine2="                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int widthPx = safeDpToPx(element.getWidth().getLinearDimension());"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int widthPx = safeDpToPx(element.getWidth().getLinearDimension());"
+        errorLine2="                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int heightPx = safeDpToPx(element.getHeight().getLinearDimension());"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int heightPx = safeDpToPx(element.getHeight().getLinearDimension());"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getExtensionId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        element.getPayload().toByteArray(), element.getExtensionId());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getPayload can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        element.getPayload().toByteArray(), element.getExtensionId());"
+        errorLine2="                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int widthPx = safeDpToPx(element.getWidth().getLinearDimension());"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int widthPx = safeDpToPx(element.getWidth().getLinearDimension());"
+        errorLine2="                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int heightPx = safeDpToPx(element.getHeight().getLinearDimension());"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        int heightPx = safeDpToPx(element.getHeight().getLinearDimension());"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (stringProp.hasDynamicValue() &amp;&amp; pipelineMaker.isPresent()) {"
+        errorLine2="                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                stringProp.getDynamicValue(),"
+        errorLine2="                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                stringProp.getValue(),"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                consumer.accept(stringProp.getValue());"
+        errorLine2="                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            consumer.accept(stringProp.getValue());"
+        errorLine2="                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (degreesProp.hasDynamicValue() &amp;&amp; pipelineMaker.isPresent()) {"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        .addPipelineFor(degreesProp, degreesProp.getValue(), posId, consumer);"
+        errorLine2="                                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                consumer.accept(degreesProp.getValue());"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            consumer.accept(degreesProp.getValue());"
+        errorLine2="                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (dpProp.hasDynamicValue() &amp;&amp; pipelineMaker.isPresent()) {"
+        errorLine2="                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                pipelineMaker.get().addPipelineFor(dpProp, dpProp.getValue(), posId, consumer);"
+        errorLine2="                                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                consumer.accept(dpProp.getValue());"
+        errorLine2="                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            consumer.accept(dpProp.getValue());"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (colorProp.hasDynamicValue() &amp;&amp; pipelineMaker.isPresent()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                pipelineMaker.get().addPipelineFor(colorProp, colorProp.getArgb(), posId, consumer);"
+        errorLine2="                                                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                consumer.accept(colorProp.getArgb());"
+        errorLine2="                                          ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            consumer.accept(colorProp.getArgb());"
+        errorLine2="                                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (stringProp.hasDynamicValue() &amp;&amp; mDataPipeline.isPresent()) {"
+        errorLine2="                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (!stringProp.getValueForLayout().isEmpty()) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        DpProp dimension = spacerDimension.getLinearDimension();"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (dimension.hasDynamicValue() &amp;&amp; mDataPipeline.isPresent()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (dimension.getValueForLayout() > 0f) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (degreesProp.hasDynamicValue() &amp;&amp; mDataPipeline.isPresent()) {"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (degreesProp.getValueForLayout() > 0f) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (degreesProp.hasDynamicValue() &amp;&amp; mDataPipeline.isPresent()) {"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (degreesProp.getValueForLayout() > 0f) {"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return degreesProp.getValueForLayout();"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (containerWidth.hasWrappedDimension()"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (containerHeight.hasWrappedDimension()"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (element.getInnerCase()) {"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.COLUMN can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case COLUMN:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getColumn().getWidth());"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getColumn().getWidth());"
+        errorLine2="                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ROW can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ROW:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getRow().getWidth());"
+        errorLine2="                                            ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getRow().getWidth());"
+        errorLine2="                                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.BOX can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case BOX:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getBox().getWidth());"
+        errorLine2="                                                     ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getBox().getWidth());"
+        errorLine2="                                            ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPACER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPACER:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getSpacer().getWidth());"
+        errorLine2="                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getSpacer().getWidth());"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.IMAGE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case IMAGE:"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                Image img = element.getImage();"
+        errorLine2="                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (img.getWidth().hasProportionalDimension()) {"
+        errorLine2="                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (img.getWidth().hasProportionalDimension()) {"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            (containerHeight.hasExpandedDimension()"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    || containerHeight.hasLinearDimension());"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return img.getHeight().hasLinearDimension()"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return img.getHeight().hasLinearDimension()"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            || (img.getHeight().hasExpandedDimension() &amp;&amp; isContainerHeightKnown);"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            || (img.getHeight().hasExpandedDimension() &amp;&amp; isContainerHeightKnown);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return isMeasurable(element.getImage().getWidth());"
+        errorLine2="                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return isMeasurable(element.getImage().getWidth());"
+        errorLine2="                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ARC can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.TEXT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT:"
+        errorLine2="                 ~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPANNABLE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPANNABLE:"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (element.getInnerCase()) {"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.COLUMN can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case COLUMN:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getColumn().getHeight());"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getColumn().getHeight());"
+        errorLine2="                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ROW can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ROW:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getRow().getHeight());"
+        errorLine2="                                            ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getRow().getHeight());"
+        errorLine2="                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.BOX can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case BOX:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getBox().getHeight());"
+        errorLine2="                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getBox().getHeight());"
+        errorLine2="                                            ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPACER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPACER:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getSpacer().getHeight());"
+        errorLine2="                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return isMeasurable(element.getSpacer().getHeight());"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.IMAGE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case IMAGE:"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                Image img = element.getImage();"
+        errorLine2="                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (img.getHeight().hasProportionalDimension()) {"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (img.getHeight().hasProportionalDimension()) {"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            (containerWidth.hasExpandedDimension()"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    || containerWidth.hasLinearDimension());"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return img.getWidth().hasLinearDimension()"
+        errorLine2="                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return img.getWidth().hasLinearDimension()"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            || (img.getWidth().hasExpandedDimension() &amp;&amp; isContainerWidthKnown);"
+        errorLine2="                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            || (img.getWidth().hasExpandedDimension() &amp;&amp; isContainerWidthKnown);"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return isMeasurable(element.getImage().getHeight());"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    return isMeasurable(element.getImage().getHeight());"
+        errorLine2="                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ARC can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.TEXT can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case TEXT:"
+        errorLine2="                 ~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPANNABLE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPANNABLE:"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (dimension.getInnerCase()) {"
+        errorLine2="                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case LINEAR_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.PROPORTIONAL_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case PROPORTIONAL_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.EXPANDED_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case EXPANDED_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (dimension.getInnerCase()) {"
+        errorLine2="                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case LINEAR_DIMENSION:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case INNER_NOT_SET:"
+        errorLine2="                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        mLayoutProto.getRoot(),"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.hasFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (mLayoutProto.hasFingerprint()) {"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    new RenderedMetadata(mLayoutProto.getFingerprint(), layoutInfoBuilder.build()));"
+        errorLine2="                                                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                : checkNotNull("
+        errorLine2="                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        prevLayoutInfo.getViewPropertiesFor(parentNodePosId));"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                new RenderedMetadata(targetLayout.getFingerprint(), layoutInfoBuilder.build()),"
+        errorLine2="                                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                prevRenderedMetadata.getTreeFingerprint().getRoot(),"
+        errorLine2="                                                          ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        prevRenderedMetadata.getTreeFingerprint().getRoot(),"
+        errorLine2="                                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SemanticsRole.SEMANTICS_ROLE_IMAGE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SEMANTICS_ROLE_IMAGE:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SemanticsRole.SEMANTICS_ROLE_BUTTON can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SEMANTICS_ROLE_BUTTON:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SemanticsRole.SEMANTICS_ROLE_CHECKBOX can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SEMANTICS_ROLE_CHECKBOX:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SemanticsRole.SEMANTICS_ROLE_SWITCH can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SEMANTICS_ROLE_SWITCH:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SemanticsRole.SEMANTICS_ROLE_RADIOBUTTON can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SEMANTICS_ROLE_RADIOBUTTON:"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getRole can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        String className = roleToClassName(semantics.getRole());"
+        errorLine2="                                                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.hasContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (semantics.hasContentDescription()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    semantics.getContentDescription(),"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getObsoleteContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            view.setContentDescription(semantics.getObsoleteContentDescription());"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.hasStateDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (semantics.hasStateDescription()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getStateDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    semantics.getStateDescription(),"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            Action action = mClickable.getOnClick();"
+        errorLine2="                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getValueCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            switch (action.getValueCase()) {"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.LAUNCH_ACTION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case LAUNCH_ACTION:"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    action.getLaunchAction(),"
+        errorLine2="                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    mClickable.getId(),"
+        errorLine2="                                               ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.LOAD_ACTION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case LOAD_ACTION:"
+        errorLine2="                     ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                                    action.getLoadAction(), mClickable.getId())));"
+        errorLine2="                                                           ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                                    action.getLoadAction(), mClickable.getId())));"
+        errorLine2="                                                                                       ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ValueCase.VALUE_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                case VALUE_NOT_SET:"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return checkNotNull(array.getFont(styleableResId));"
+        errorLine2="                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return checkNotNull(array.getFont(styleableResId));"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(array.getString(styleableResId)), Typeface.NORMAL);"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkNotNull(array.getString(styleableResId)), Typeface.NORMAL);"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.FONT_VARIANT_TITLE_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                FontVariant.FONT_VARIANT_TITLE_VALUE,"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.FONT_VARIANT_BODY_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                FontVariant.FONT_VARIANT_BODY_VALUE,"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.FONT_VARIANT_BODY_VALUE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                checkNotNull(mVariantToFontSet.get(FontVariant.FONT_VARIANT_BODY_VALUE));"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                checkNotNull(mVariantToFontSet.get(FontVariant.FONT_VARIANT_BODY_VALUE));"
+        errorLine2="                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                checkNotNull(mVariantToFontSet.get(FontVariant.FONT_VARIANT_BODY_VALUE));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutThemeImpl.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    checkNotNull("
+        errorLine2="                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            mNewInflateParentData.mInflateResult,"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            TAG"
+        errorLine2="                            ^">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mInflater.applyMutation(checkNotNull(prevInflateParent), mMutation);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mInflater.applyMutation(checkNotNull(prevInflateParent), mMutation);"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                prevRenderedMetadata.getTreeFingerprint(), layout.getFingerprint());"
+        errorLine2="                                                                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            checkLayoutDepth(layout.getRoot(), MAX_LAYOUT_ELEMENT_DEPTH);"
+        errorLine2="                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            checkNotNull(prevRenderedMetadata);"
+        errorLine2="            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            checkNotNull(prevRenderedMetadata);"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!checkNotNull(mRenderFuture).isDone()) {"
+        errorLine2="             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (!checkNotNull(mRenderFuture).isDone()) {"
+        errorLine2="                          ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                                checkNotNull(mRenderFuture).get(),"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                                checkNotNull(mRenderFuture).get(),"
+        errorLine2="                                                             ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    checkNotNull("
+        errorLine2="                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    newInflateParentData.mInflateResult,"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    TAG"
+        errorLine2="                                    ^">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                ProtoLayoutInflater.clearRenderedMetadata(checkNotNull(prevInflateParent));"
+        errorLine2="                                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                ProtoLayoutInflater.clearRenderedMetadata(checkNotNull(prevInflateParent));"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        switch (layoutElement.getInnerCase()) {"
+        errorLine2="                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.COLUMN can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case COLUMN:"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                children = layoutElement.getColumn().getContentsList();"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                children = layoutElement.getColumn().getContentsList();"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ROW can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ROW:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                children = layoutElement.getRow().getContentsList();"
+        errorLine2="                                         ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                children = layoutElement.getRow().getContentsList();"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.BOX can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case BOX:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                children = layoutElement.getBox().getContentsList();"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                children = layoutElement.getBox().getContentsList();"
+        errorLine2="                                         ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ARC can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case ARC:"
+        errorLine2="                 ~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                List&lt;ArcLayoutElement> arcElements = layoutElement.getArc().getContentsList();"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                List&lt;ArcLayoutElement> arcElements = layoutElement.getArc().getContentsList();"
+        errorLine2="                                                                   ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (element.getInnerCase() == InnerCase.ADAPTER) {"
+        errorLine2="                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.ADAPTER can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    if (element.getInnerCase() == InnerCase.ADAPTER) {"
+        errorLine2="                                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.getContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkLayoutDepth(element.getAdapter().getContent(), allowedDepth - 1);"
+        errorLine2="                                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        checkLayoutDepth(element.getAdapter().getContent(), allowedDepth - 1);"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.SPANNABLE can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            case SPANNABLE:"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (layoutElement.getSpannable().getSpansCount() > 0 &amp;&amp; allowedDepth == 1) {"
+        errorLine2="                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getSpansCount can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (layoutElement.getSpannable().getSpansCount() > 0 &amp;&amp; allowedDepth == 1) {"
+        errorLine2="                                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mProtoResources.getIdToImageMap().get(placeholderResourceId);"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (placeholderImageResource.hasAndroidContentUri()) {"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mProtoResources.getIdToImageMap().get(protoResourceId);"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mProtoResources.getIdToImageMap().get(protoResourceId);"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource != null &amp;&amp; imageResource.hasAndroidAnimatedResourceByResId()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.getStartTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return imageResource.getAndroidAnimatedResourceByResId().getStartTrigger();"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return imageResource.getAndroidAnimatedResourceByResId().getStartTrigger();"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mProtoResources.getIdToImageMap().get(protoResourceId);"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource != null &amp;&amp; imageResource.hasAndroidSeekableAnimatedResourceByResId()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.getProgress can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return imageResource.getAndroidSeekableAnimatedResourceByResId().getProgress();"
+        errorLine2="                                                                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return imageResource.getAndroidSeekableAnimatedResourceByResId().getProgress();"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource.hasAndroidAnimatedResourceByResId()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return resolver.getDrawableOrThrow(imageResource.getAndroidAnimatedResourceByResId());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource.hasAndroidSeekableAnimatedResourceByResId()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    imageResource.getAndroidSeekableAnimatedResourceByResId());"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource.hasAndroidResourceByResId()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return resolver.getDrawableOrThrow(imageResource.getAndroidResourceByResId());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource.hasInlineResource() &amp;&amp; mInlineImageResourceResolver != null) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return resolver.getDrawableOrThrow(imageResource.getInlineResource());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource.hasAndroidContentUri()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidContentUri can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return resolver.getDrawable(imageResource.getAndroidContentUri());"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mProtoResources.getIdToImageMap().get(protoResourceId);"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (imageResource.hasAndroidResourceByResId()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || imageResource.hasAndroidAnimatedResourceByResId()"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                || imageResource.hasAndroidSeekableAnimatedResourceByResId()) {"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mProtoResources.getIdToImageMap().get(originalResourceId);"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/renderer/inflater/ResourceResolvers.java"/>
+    </issue>
+
+</issues>
diff --git a/wear/protolayout/protolayout/api/current.ignore b/wear/protolayout/protolayout/api/current.ignore
deleted file mode 100644
index 2d69c6a..0000000
--- a/wear/protolayout/protolayout/api/current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.wear.protolayout.LayoutElementBuilders.Arc#getLayoutConstraintsForDynamicAnchorAngle():
-    Removed method androidx.wear.protolayout.LayoutElementBuilders.Arc.getLayoutConstraintsForDynamicAnchorAngle()
-RemovedMethod: androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder#setLayoutConstraintsForDynamicAnchorAngle(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint):
-    Removed method androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder.setLayoutConstraintsForDynamicAnchorAngle(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint)
diff --git a/wear/protolayout/protolayout/api/restricted_current.ignore b/wear/protolayout/protolayout/api/restricted_current.ignore
deleted file mode 100644
index 2d69c6a..0000000
--- a/wear/protolayout/protolayout/api/restricted_current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.wear.protolayout.LayoutElementBuilders.Arc#getLayoutConstraintsForDynamicAnchorAngle():
-    Removed method androidx.wear.protolayout.LayoutElementBuilders.Arc.getLayoutConstraintsForDynamicAnchorAngle()
-RemovedMethod: androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder#setLayoutConstraintsForDynamicAnchorAngle(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint):
-    Removed method androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder.setLayoutConstraintsForDynamicAnchorAngle(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint)
diff --git a/wear/protolayout/protolayout/lint-baseline.xml b/wear/protolayout/protolayout/lint-baseline.xml
new file mode 100644
index 0000000..d76ba1b
--- /dev/null
+++ b/wear/protolayout/protolayout/lint-baseline.xml
@@ -0,0 +1,7825 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidStringExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setStringVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setStringVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidStringExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.AndroidStringExtra.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidIntExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setIntVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setIntVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidIntExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.AndroidIntExtra.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidLongExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setLongVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setLongVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidLongExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.AndroidLongExtra.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidDoubleExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setDoubleVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setDoubleVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidDoubleExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.AndroidDoubleExtra.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidBooleanExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setBooleanVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setBooleanVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidBooleanExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.AndroidBooleanExtra.newBuilder();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasStringVal()) {"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return AndroidStringExtra.fromProto(proto.getStringVal(), fingerprint);"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasIntVal()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return AndroidIntExtra.fromProto(proto.getIntVal(), fingerprint);"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLongVal()) {"
+        errorLine2="                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return AndroidLongExtra.fromProto(proto.getLongVal(), fingerprint);"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasDoubleVal()) {"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return AndroidDoubleExtra.fromProto(proto.getDoubleVal(), fingerprint);"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasBooleanVal()) {"
+        errorLine2="                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return AndroidBooleanExtra.fromProto(proto.getBooleanVal(), fingerprint);"
+        errorLine2="                                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getPackageName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getPackageName();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getClassName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getClassName();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getKeyToExtraMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    mImpl.getKeyToExtraMap().entrySet()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.AndroidActivity.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPackageName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setPackageName(packageName);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClassName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setClassName(className);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putKeyToExtra can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.putKeyToExtra(key, extra.toAndroidExtraProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.hasAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAndroidActivity()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.getAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AndroidActivity.fromProto(mImpl.getAndroidActivity());"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLaunchAction(mImpl).build();"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLaunchAction(mImpl).build();"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.LaunchAction.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAndroidActivity(androidActivity.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LoadAction.hasRequestState can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasRequestState()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LoadAction.getRequestState can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return State.fromProto(mImpl.getRequestState());"
+        errorLine2="                                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLoadAction(mImpl).build();"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLoadAction(mImpl).build();"
+        errorLine2="                                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LoadAction.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ActionProto.LoadAction.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRequestState can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRequestState(requestState.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.hasLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLaunchAction()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LaunchAction.fromProto(proto.getLaunchAction(), fingerprint);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.hasLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLoadAction()) {"
+        errorLine2="                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LoadAction.fromProto(proto.getLoadAction(), fingerprint);"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getArgb();"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasDynamicValue()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DynamicBuilders.dynamicColorFromProto(mImpl.getDynamicValue());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final ColorProto.ColorProp.Builder mImpl = ColorProto.ColorProp.newBuilder();"
+        errorLine2="                                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setArgb(argb);"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDynamicValue(dynamicValue.toDynamicColorProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasArgb()) {"
+        errorLine2="                                                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasArgb()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenWidthDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getScreenWidthDp();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenHeightDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getScreenHeightDp();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenDensity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getScreenDensity();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getFontScale can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getFontScale();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getDevicePlatform can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getDevicePlatform().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DevicePlatform.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getDevicePlatform().getNumber();"
+        errorLine2="                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenShape can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getScreenShape().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ScreenShape.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getScreenShape().getNumber();"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.hasRendererSchemaVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasRendererSchemaVersion()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getRendererSchemaVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return VersionInfo.fromProto(mImpl.getRendererSchemaVersion());"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.hasCapabilities can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasCapabilities()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getCapabilities can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Capabilities.fromProto(mImpl.getCapabilities());"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DeviceParametersProto.DeviceParameters.newBuilder();"
+        errorLine2="                                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenWidthDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setScreenWidthDp(screenWidthDp);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenHeightDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setScreenHeightDp(screenHeightDp);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenDensity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setScreenDensity(screenDensity);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFontScale can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFontScale(fontScale);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDevicePlatform can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDevicePlatform("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DevicePlatform.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        DeviceParametersProto.DevicePlatform.forNumber(devicePlatform));"
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenShape can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setScreenShape(DeviceParametersProto.ScreenShape.forNumber(screenShape));"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ScreenShape.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setScreenShape(DeviceParametersProto.ScreenShape.forNumber(screenShape));"
+        errorLine2="                                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRendererSchemaVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRendererSchemaVersion(rendererSchemaVersion.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCapabilities can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setCapabilities(capabilities.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Capabilities.getMinimumFreshnessLimitMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getMinimumFreshnessLimitMillis();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Capabilities.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DeviceParametersProto.Capabilities.newBuilder();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMinimumFreshnessLimitMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMinimumFreshnessLimitMillis(minimumFreshnessLimitMillis);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasDynamicValue()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DynamicBuilders.dynamicFloatFromProto(mImpl.getDynamicValue());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.SpacerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.SpacerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ExtensionDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ExtensionDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final DimensionProto.DpProp.Builder mImpl = DimensionProto.DpProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(staticValue);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDynamicValue(dynamicValue.toDynamicFloatProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValueForLayout();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.SpacerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.SpacerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DimensionProto.DpProp.newBuilder();"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValueForLayout(value);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getHorizontalAlignmentForLayoutValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getHorizontalAlignmentForLayoutValue();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHorizontalAlignmentForLayoutValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHorizontalAlignmentForLayoutValue(horizontalAlignment);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getVerticalAlignmentForLayoutValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getVerticalAlignmentForLayoutValue();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignmentForLayoutValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVerticalAlignmentForLayoutValue(verticalAlignment);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final DimensionProto.SpProp.Builder mImpl = DimensionProto.SpProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EmProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EmProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final DimensionProto.EmProp.Builder mImpl = DimensionProto.EmProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasDynamicValue()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DynamicBuilders.dynamicFloatFromProto(mImpl.getDynamicValue());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DimensionProto.DegreesProp.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(staticValue);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDynamicValue(dynamicValue.toDynamicFloatProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValueForLayout();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getAngularAlignmentForLayoutValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getAngularAlignmentForLayoutValue();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DimensionProto.DegreesProp.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValueForLayout(value);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAngularAlignmentForLayoutValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAngularAlignmentForLayoutValue(angularAlignment);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedDimensionProp.hasLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLayoutWeight()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedDimensionProp.getLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FloatProp.fromProto(mImpl.getLayoutWeight());"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder()"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    .setExpandedDimension(mImpl)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setExpandedDimension(mImpl).build();"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setExpandedDimension(mImpl).build();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedDimensionProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DimensionProto.ExpandedDimensionProp.newBuilder();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLayoutWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setLayoutWeight(layoutWeight.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.hasMinimumSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasMinimumSize()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.getMinimumSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getMinimumSize());"
+        errorLine2="                                              ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder()"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    .setWrappedDimension(mImpl)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DimensionProto.WrappedDimensionProp.newBuilder();"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMinimumSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMinimumSize(minimumSize.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.getAspectRatioWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getAspectRatioWidth();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.getAspectRatioHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getAspectRatioHeight();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder()"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    .setProportionalDimension(mImpl)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    DimensionProto.ProportionalDimensionProp.newBuilder();"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAspectRatioWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAspectRatioWidth(aspectRatioWidth);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAspectRatioHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAspectRatioHeight(aspectRatioHeight);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLinearDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DpProp.fromProto(proto.getLinearDimension(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasExpandedDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ExpandedDimensionProp.fromProto(proto.getExpandedDimension(), fingerprint);"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasWrappedDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return WrappedDimensionProp.fromProto(proto.getWrappedDimension(), fingerprint);"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLinearDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DpProp.fromProto(proto.getLinearDimension(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasExpandedDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ExpandedDimensionProp.fromProto(proto.getExpandedDimension(), fingerprint);"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasProportionalDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    proto.getProportionalDimension(), fingerprint);"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLinearDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DpProp.fromProto(proto.getLinearDimension(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLinearDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return DpProp.fromProto(proto.getLinearDimension(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeightProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeightProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.FontWeightProp.newBuilder();"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontWeight.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontWeight.forNumber(value));"
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariantProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariantProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.FontVariantProp.newBuilder();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontVariant.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontVariant.forNumber(value));"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.SpanVerticalAlignmentProp.newBuilder();"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.SpanVerticalAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.SpanVerticalAlignment.forNumber(value));"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasSize()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SpProp.fromProto(mImpl.getSize());"
+        errorLine2="                                              ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasItalic()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return BoolProp.fromProto(mImpl.getItalic());"
+        errorLine2="                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasUnderline()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return BoolProp.fromProto(mImpl.getUnderline());"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FontWeightProp.fromProto(mImpl.getWeight());"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLetterSpacing()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return EmProp.fromProto(mImpl.getLetterSpacing());"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasVariant()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FontVariantProp.fromProto(mImpl.getVariant());"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.FontStyle.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setSize(size.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setItalic(italic.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setUnderline(underline.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWeight(weight.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setLetterSpacing(letterSpacing.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVariant(variant.toProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVariant("
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariantProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        LayoutElementProto.FontVariantProp.newBuilder()"
+        errorLine2="                                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                .setValue(LayoutElementProto.FontVariant.forNumber(variant)));"
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                .setValue(LayoutElementProto.FontVariant.forNumber(variant)));"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflowProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflowProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.TextOverflowProp.newBuilder();"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.TextOverflow.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.TextOverflow.forNumber(value));"
+        errorLine2="                                                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.getIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getIterations();"
+        errorLine2="                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.MarqueeParameters.newBuilder();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setIterations(iterations);"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidTextStyle.getExcludeFontPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getExcludeFontPadding();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidTextStyle.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.AndroidTextStyle.newBuilder();"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExcludeFontPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setExcludeFontPadding(excludeFontPadding);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasText()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringProp.fromProto(mImpl.getText());"
+        errorLine2="                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasText()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringLayoutConstraint.fromProto(mImpl.getText());"
+        errorLine2="                                                              ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasFontStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FontStyle.fromProto(mImpl.getFontStyle());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasMaxLines()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Int32Prop.fromProto(mImpl.getMaxLines());"
+        errorLine2="                                                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasMultilineAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return TextAlignmentProp.fromProto(mImpl.getMultilineAlignment());"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasOverflow()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return TextOverflowProp.fromProto(mImpl.getOverflow());"
+        errorLine2="                                                        ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLineHeight()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SpProp.fromProto(mImpl.getLineHeight());"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAndroidTextStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AndroidTextStyle.fromProto(mImpl.getAndroidTextStyle());"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.getIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getMarqueeParameters().getIterations();"
+        errorLine2="                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMarqueeParameters can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getMarqueeParameters().getIterations();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Text.newBuilder();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.mergeText(text.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.mergeText(stringLayoutConstraint.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFontStyle(fontStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMaxLines(maxLines.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMultilineAlignment(multilineAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setOverflow(overflow.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setLineHeight(lineHeight.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAndroidTextStyle(androidTextStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMarqueeParameters can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMarqueeParameters("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        LayoutElementProto.MarqueeParameters.newBuilder()"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                .setIterations(marqueeIterations));"
+        errorLine2="                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                TypesProto.StringProp text = mImpl.getText();"
+        errorLine2="                                                   ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (text.hasDynamicValue() &amp;&amp; !text.hasValueForLayout()) {"
+        errorLine2="                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.hasValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (text.hasDynamicValue() &amp;&amp; !text.hasValueForLayout()) {"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleModeProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleModeProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.ContentScaleModeProp.newBuilder();"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.ContentScaleMode.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.ContentScaleMode.forNumber(value));"
+        errorLine2="                                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.hasTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasTint()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.getTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ColorProp.fromProto(mImpl.getTint());"
+        errorLine2="                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.ColorFilter.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setTint(tint.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasResourceId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringProp.fromProto(mImpl.getResourceId());"
+        errorLine2="                                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.imageDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.imageDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasContentScaleMode()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ContentScaleModeProp.fromProto(mImpl.getContentScaleMode());"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasColorFilter()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ColorFilter.fromProto(mImpl.getColorFilter());"
+        errorLine2="                                                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Image.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setResourceId(resourceId.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidth(width.toImageDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeight(height.toImageDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setContentScaleMode(contentScaleMode.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setColorFilter(colorFilter.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.spacerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.getWidth().hasLinearDimension()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.getWidth().hasLinearDimension()) {"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return HorizontalLayoutConstraint.fromProto(mImpl.getWidth().getLinearDimension());"
+        errorLine2="                                                                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return HorizontalLayoutConstraint.fromProto(mImpl.getWidth().getLinearDimension());"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.spacerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.getHeight().hasLinearDimension()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.getHeight().hasLinearDimension()) {"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return VerticalLayoutConstraint.fromProto(mImpl.getHeight().getLinearDimension());"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return VerticalLayoutConstraint.fromProto(mImpl.getHeight().getLinearDimension());"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Spacer.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.mergeWidth(width.toSpacerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                switch (mImpl.getWidth().getInnerCase()) {"
+        errorLine2="                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                switch (mImpl.getWidth().getInnerCase()) {"
+        errorLine2="                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case INNER_NOT_SET:"
+        errorLine2="                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case LINEAR_DIMENSION:"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        mImpl.mergeWidth(horizontalLayoutConstraint.toSpacerDimensionProto());"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeight(height.toSpacerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                switch (mImpl.getHeight().getInnerCase()) {"
+        errorLine2="                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getInnerCase can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                switch (mImpl.getHeight().getInnerCase()) {"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.INNER_NOT_SET can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case INNER_NOT_SET:"
+        errorLine2="                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InnerCase.LINEAR_DIMENSION can only be accessed from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    case LINEAR_DIMENSION:"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        mImpl.mergeHeight(verticalLayoutConstraint.toSpacerDimensionProto());"
+        errorLine2="                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                DimensionProto.DpProp width = mImpl.getWidth().getLinearDimension();"
+        errorLine2="                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                DimensionProto.DpProp width = mImpl.getWidth().getLinearDimension();"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (width.hasDynamicValue() &amp;&amp; !width.hasValueForLayout()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (width.hasDynamicValue() &amp;&amp; !width.hasValueForLayout()) {"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                DimensionProto.DpProp height = mImpl.getHeight().getLinearDimension();"
+        errorLine2="                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                DimensionProto.DpProp height = mImpl.getHeight().getLinearDimension();"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (height.hasDynamicValue() &amp;&amp; !height.hasValueForLayout()) {"
+        errorLine2="                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.hasValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (height.hasDynamicValue() &amp;&amp; !height.hasValueForLayout()) {"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (LayoutElementProto.LayoutElement item : mImpl.getContentsList()) {"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHorizontalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return HorizontalAlignmentProp.fromProto(mImpl.getHorizontalAlignment());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasVerticalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlignment());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setBox(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setBox(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Box.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.addContents(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeight(height.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidth(width.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHorizontalAlignment(horizontalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVerticalAlignment(verticalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasText()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringProp.fromProto(mImpl.getText());"
+        errorLine2="                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasFontStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FontStyle.fromProto(mImpl.getFontStyle());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SpanModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAndroidTextStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AndroidTextStyle.fromProto(mImpl.getAndroidTextStyle());"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setText(mImpl).build();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.SpanText.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setText(text.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFontStyle(fontStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidTextStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAndroidTextStyle(androidTextStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasResourceId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringProp.fromProto(mImpl.getResourceId());"
+        errorLine2="                                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getWidth());"
+        errorLine2="                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getHeight());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SpanModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SpanVerticalAlignmentProp.fromProto(mImpl.getAlignment());"
+        errorLine2="                                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.SpanImage.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setResourceId(resourceId.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidth(width.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeight(height.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAlignment(alignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasText()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return SpanText.fromProto(proto.getText(), fingerprint);"
+        errorLine2="                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.hasImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasImage()) {"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return SpanImage.fromProto(proto.getImage(), fingerprint);"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getSpansList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (LayoutElementProto.Span item : mImpl.getSpansList()) {"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasMaxLines()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Int32Prop.fromProto(mImpl.getMaxLines());"
+        errorLine2="                                                 ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasMultilineAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return HorizontalAlignmentProp.fromProto(mImpl.getMultilineAlignment());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasOverflow()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return TextOverflowProp.fromProto(mImpl.getOverflow());"
+        errorLine2="                                                        ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLineHeight()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SpProp.fromProto(mImpl.getLineHeight());"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.getIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getMarqueeParameters().getIterations();"
+        errorLine2="                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMarqueeParameters can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getMarqueeParameters().getIterations();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpannable(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpannable(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Spannable.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addSpans can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.addSpans(span.toSpanProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMaxLines(maxLines.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMultilineAlignment(multilineAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setOverflow(overflow.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setLineHeight(lineHeight.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMarqueeParameters can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMarqueeParameters("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="MarqueeParameters.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        LayoutElementProto.MarqueeParameters.newBuilder()"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIterations can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                .setIterations(marqueeIterations));"
+        errorLine2="                                 ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (LayoutElementProto.LayoutElement item : mImpl.getContentsList()) {"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHorizontalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return HorizontalAlignmentProp.fromProto(mImpl.getHorizontalAlignment());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setColumn(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setColumn(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Column.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.addContents(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHorizontalAlignment(horizontalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidth(width.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeight(height.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (LayoutElementProto.LayoutElement item : mImpl.getContentsList()) {"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasVerticalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlignment());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setRow(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setRow(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Row.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.addContents(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVerticalAlignment(verticalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVerticalAlignment("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        AlignmentProto.VerticalAlignmentProp.newBuilder()"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                        AlignmentProto.VerticalAlignment.forNumber("
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidth(width.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeight(height.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (LayoutElementProto.ArcLayoutElement item : mImpl.getContentsList()) {"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAnchorAngle()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DegreesProp.fromProto(mImpl.getAnchorAngle());"
+        errorLine2="                                                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAnchorType()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ArcAnchorTypeProp.fromProto(mImpl.getAnchorType());"
+        errorLine2="                                                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasVerticalAlign()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlign());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setArc(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setArc(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Arc.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.addContents(content.toArcLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnchorAngle(anchorAngle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnchorType(anchorType.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVerticalAlign(verticalAlign.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasText()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringProp.fromProto(mImpl.getText());"
+        errorLine2="                                                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasFontStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FontStyle.fromProto(mImpl.getFontStyle());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ArcModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.ArcText.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setText(text.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFontStyle(fontStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLength()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DegreesProp.fromProto(mImpl.getLength());"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLength()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AngularLayoutConstraint.fromProto(mImpl.getLength());"
+        errorLine2="                                                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasThickness()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getThickness());"
+        errorLine2="                                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ArcModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasStrokeCap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasStrokeCap()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getStrokeCap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StrokeCapProp.fromProto(mImpl.getStrokeCap());"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setLine(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLine can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setLine(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.ArcLine.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.mergeLength(length.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.mergeLength(angularLayoutConstraint.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setThickness(thickness.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStrokeCap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setStrokeCap(strokeCap.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                DimensionProto.DegreesProp length = mImpl.getLength();"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (length.hasDynamicValue() &amp;&amp; !length.hasValueForLayout()) {"
+        errorLine2="                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.hasValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (length.hasDynamicValue() &amp;&amp; !length.hasValueForLayout()) {"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCap.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCapProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCapProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.StrokeCapProp.newBuilder();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.StrokeCap.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StrokeCap.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.StrokeCap.forNumber(value));"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.hasLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLength()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DegreesProp.fromProto(mImpl.getLength());"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.hasThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasThickness()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getThickness());"
+        errorLine2="                                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ArcModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.ArcSpacer.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setLength(length.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setThickness(thickness.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.hasContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasContent()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.getContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return LayoutElementBuilders.layoutElementFromProto(mImpl.getContent());"
+        errorLine2="                                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.hasRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasRotateContents()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.getRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return BoolProp.fromProto(mImpl.getRotateContents());"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setAdapter(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setAdapter(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.ArcAdapter.newBuilder();"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setContent(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRotateContents(rotateContents.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getPayload can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getPayload().toByteArray();"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getExtensionId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getExtensionId();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.extensionDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DimensionBuilders.extensionDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExtension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setExtension(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setExtension(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExtensionLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.ExtensionLayoutElement.newBuilder();"
+        errorLine2="                                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPayload can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setPayload(ByteString.copyFrom(payload));"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExtensionId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setExtensionId(extensionId);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidth(width.toExtensionDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeight(height.toExtensionDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasColumn()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Column.fromProto(proto.getColumn(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasRow()) {"
+        errorLine2="                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Row.fromProto(proto.getRow(), fingerprint);"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasBox()) {"
+        errorLine2="                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Box.fromProto(proto.getBox(), fingerprint);"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasSpacer()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Spacer.fromProto(proto.getSpacer(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasText()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Text.fromProto(proto.getText(), fingerprint);"
+        errorLine2="                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasImage()) {"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Image.fromProto(proto.getImage(), fingerprint);"
+        errorLine2="                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasArc()) {"
+        errorLine2="                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Arc.fromProto(proto.getArc(), fingerprint);"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasSpannable()) {"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return Spannable.fromProto(proto.getSpannable(), fingerprint);"
+        errorLine2="                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasExtension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasExtension()) {"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getExtension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ExtensionLayoutElement.fromProto(proto.getExtension(), fingerprint);"
+        errorLine2="                                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasText()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ArcText.fromProto(proto.getText(), fingerprint);"
+        errorLine2="                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasLine can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasLine()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getLine can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ArcLine.fromProto(proto.getLine(), fingerprint);"
+        errorLine2="                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasSpacer()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ArcSpacer.fromProto(proto.getSpacer(), fingerprint);"
+        errorLine2="                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasAdapter()) {"
+        errorLine2="                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ArcAdapter.fromProto(proto.getAdapter(), fingerprint);"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.hasRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasRoot()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return LayoutElementBuilders.layoutElementFromProto(mImpl.getRoot());"
+        errorLine2="                                                                          ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.parseFrom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return fromProto(LayoutElementProto.Layout.parseFrom(byteArray));"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    LayoutElementProto.Layout.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRoot(root.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    mImpl.setFingerprint("
+        errorLine2="                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            TreeFingerprint.newBuilder().setRoot(fingerprintToProto(fingerprint)));"
+        errorLine2="                                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                            TreeFingerprint.newBuilder().setRoot(fingerprintToProto(fingerprint)));"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        FingerprintProto.NodeFingerprint.newBuilder();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSelfTypeValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    builder.setSelfTypeValue(fingerprint.selfTypeValue());"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    builder.setSelfPropsValue(fingerprint.selfPropsValue());"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    builder.setChildNodesValue(fingerprint.childNodesValue());"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addChildNodes can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    builder.addChildNodes(fingerprintToProto(childNode));"
+        errorLine2="                            ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    AlignmentProto.HorizontalAlignmentProp.newBuilder();"
+        errorLine2="                                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.HorizontalAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.HorizontalAlignment.forNumber(value));"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    AlignmentProto.VerticalAlignmentProp.newBuilder();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.VerticalAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.VerticalAlignment.forNumber(value));"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    AlignmentProto.TextAlignmentProp.newBuilder();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.TextAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.TextAlignment.forNumber(value));"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorTypeProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorTypeProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    AlignmentProto.ArcAnchorTypeProp.newBuilder();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.ArcAnchorType.forNumber(value));"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.ArcAnchorType.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getId();"
+        errorLine2="                         ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.hasOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasOnClick()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ActionBuilders.actionFromProto(mImpl.getOnClick());"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.Clickable.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setId(id);"
+        errorLine2="                      ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setOnClick(onClick.toActionProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.hasContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasContentDescription()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringProp.fromProto(mImpl.getContentDescription());"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getRole can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getRole().getNumber();"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SemanticsRole.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getRole().getNumber();"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.hasStateDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasStateDescription()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getStateDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return StringProp.fromProto(mImpl.getStateDescription());"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.Semantics.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRole can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRole(ModifiersProto.SemanticsRole.forNumber(role));"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SemanticsRole.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRole(ModifiersProto.SemanticsRole.forNumber(role));"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStateDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setStateDescription(stateDescription.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setObsoleteContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setObsoleteContentDescription(contentDescription.getValue());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setContentDescription(contentDescription.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasEnd()) {"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getEnd());"
+        errorLine2="                                              ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasStart()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getStart());"
+        errorLine2="                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasTop()) {"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getTop());"
+        errorLine2="                                              ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasBottom()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getBottom());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasRtlAware()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return BoolProp.fromProto(mImpl.getRtlAware());"
+        errorLine2="                                                ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.Padding.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setEnd(end.toProto());"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setStart(start.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setTop(top.toProto());"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setBottom(bottom.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRtlAware(rtlAware.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getWidth());"
+        errorLine2="                                              ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final ModifiersProto.Border.Builder mImpl = ModifiersProto.Border.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidth(width.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Corner.hasRadius can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasRadius()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Corner.getRadius can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DpProp.fromProto(mImpl.getRadius());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Corner.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final ModifiersProto.Corner.Builder mImpl = ModifiersProto.Corner.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRadius can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setRadius(radius.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.hasCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasCorner()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.getCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Corner.fromProto(mImpl.getCorner());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.Background.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setCorner(corner.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ElementMetadata.getTagData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getTagData().toByteArray();"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ElementMetadata.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.ElementMetadata.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTagData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setTagData(ByteString.copyFrom(tagData));"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Clickable.fromProto(mImpl.getClickable());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasSemantics()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Semantics.fromProto(mImpl.getSemantics());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasPadding()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Padding.fromProto(mImpl.getPadding());"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasBorder()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Border.fromProto(mImpl.getBorder());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasBackground()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Background.fromProto(mImpl.getBackground());"
+        errorLine2="                                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasMetadata can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasMetadata()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getMetadata can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ElementMetadata.fromProto(mImpl.getMetadata());"
+        errorLine2="                                                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasContentUpdateAnimation can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasContentUpdateAnimation()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getContentUpdateAnimation can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AnimatedVisibility.fromProto(mImpl.getContentUpdateAnimation());"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.Modifiers.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setClickable(clickable.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setSemantics(semantics.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setPadding(padding.toProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setBorder(border.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setBackground(background.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMetadata can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setMetadata(metadata.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setContentUpdateAnimation can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setContentUpdateAnimation(contentUpdateAnimation.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.hasEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasEnterTransition()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.getEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return EnterTransition.fromProto(mImpl.getEnterTransition());"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.hasExitTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasExitTransition()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.getExitTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ExitTransition.fromProto(mImpl.getExitTransition());"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedVisibility.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.AnimatedVisibility.newBuilder();"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEnterTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setEnterTransition(enterTransition.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExitTransition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setExitTransition(exitTransition.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.hasFadeIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasFadeIn()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.getFadeIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FadeInTransition.fromProto(mImpl.getFadeIn());"
+        errorLine2="                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.hasSlideIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasSlideIn()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.getSlideIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SlideInTransition.fromProto(mImpl.getSlideIn());"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EnterTransition.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.EnterTransition.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFadeIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFadeIn(fadeIn.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSlideIn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setSlideIn(slideIn.toProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeInTransition.getInitialAlpha can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getInitialAlpha();"
+        errorLine2="                         ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeInTransition.hasAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAnimationSpec()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeInTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AnimationSpec.fromProto(mImpl.getAnimationSpec());"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeInTransition.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.FadeInTransition.newBuilder();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInitialAlpha can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setInitialAlpha(initialAlpha);"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnimationSpec(animationSpec.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getDirection().getNumber();"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getDirection can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getDirection().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.hasInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasInitialSlideBound()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ModifiersBuilders.slideBoundFromProto(mImpl.getInitialSlideBound());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.hasAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAnimationSpec()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AnimationSpec.fromProto(mImpl.getAnimationSpec());"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideInTransition.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.SlideInTransition.newBuilder();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDirection can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDirection(ModifiersProto.SlideDirection.forNumber(direction));"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDirection(ModifiersProto.SlideDirection.forNumber(direction));"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInitialSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setInitialSlideBound(initialSlideBound.toSlideBoundProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnimationSpec(animationSpec.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.hasFadeOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasFadeOut()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.getFadeOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return FadeOutTransition.fromProto(mImpl.getFadeOut());"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.hasSlideOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasSlideOut()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.getSlideOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return SlideOutTransition.fromProto(mImpl.getSlideOut());"
+        errorLine2="                                                          ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExitTransition.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.ExitTransition.newBuilder();"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFadeOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFadeOut(fadeOut.toProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSlideOut can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setSlideOut(slideOut.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeOutTransition.getTargetAlpha can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getTargetAlpha();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeOutTransition.hasAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAnimationSpec()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeOutTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AnimationSpec.fromProto(mImpl.getAnimationSpec());"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FadeOutTransition.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.FadeOutTransition.newBuilder();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTargetAlpha can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setTargetAlpha(targetAlpha);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnimationSpec(animationSpec.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getDirection().getNumber();"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getDirection can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getDirection().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.hasTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasTargetSlideBound()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return ModifiersBuilders.slideBoundFromProto(mImpl.getTargetSlideBound());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.hasAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAnimationSpec()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.getAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AnimationSpec.fromProto(mImpl.getAnimationSpec());"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideOutTransition.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.SlideOutTransition.newBuilder();"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDirection can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDirection(ModifiersProto.SlideDirection.forNumber(direction));"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideDirection.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDirection(ModifiersProto.SlideDirection.forNumber(direction));"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTargetSlideBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setTargetSlideBound(targetSlideBound.toSlideBoundProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnimationSpec can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnimationSpec(animationSpec.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.hasParentBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasParentBound()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.getParentBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return SlideParentBound.fromProto(proto.getParentBound(), fingerprint);"
+        errorLine2="                                                    ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentBound.getSnapTo can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getSnapTo().getNumber();"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentSnapOption.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getSnapTo().getNumber();"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setParentBound can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ModifiersProto.SlideBound.newBuilder().setParentBound(mImpl).build();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideBound.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return ModifiersProto.SlideBound.newBuilder().setParentBound(mImpl).build();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentBound.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.SlideParentBound.newBuilder();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSnapTo can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setSnapTo(ModifiersProto.SlideParentSnapOption.forNumber(snapTo));"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SlideParentSnapOption.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setSnapTo(ModifiersProto.SlideParentSnapOption.forNumber(snapTo));"
+        errorLine2="                                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Clickable.fromProto(mImpl.getClickable());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.hasSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasSemantics()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.getSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Semantics.fromProto(mImpl.getSemantics());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.ArcModifiers.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setClickable(clickable.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setSemantics(semantics.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Clickable.fromProto(mImpl.getClickable());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ModifiersProto.SpanModifiers.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setClickable(clickable.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByResId.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getResourceId();"
+        errorLine2="                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByResId.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ResourceProto.AndroidImageResourceByResId.newBuilder();"
+        errorLine2="                                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setResourceId(resourceId);"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getData().toByteArray();"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getWidthPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getWidthPx();"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getHeightPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getHeightPx();"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getFormat().getNumber();"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getFormat().getNumber();"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ResourceProto.InlineImageResource.newBuilder();"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setData(ByteString.copyFrom(data));"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidthPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setWidthPx(widthPx);"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeightPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setHeightPx(heightPx);"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFormat(ResourceProto.ImageFormat.forNumber(format));"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setFormat(ResourceProto.ImageFormat.forNumber(format));"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.getAnimatedImageFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getAnimatedImageFormat().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedImageFormat.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getAnimatedImageFormat().getNumber();"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getResourceId();"
+        errorLine2="                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.hasStartTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasStartTrigger()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.getStartTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return TriggerBuilders.triggerFromProto(mImpl.getStartTrigger());"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidAnimatedImageResourceByResId.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ResourceProto.AndroidAnimatedImageResourceByResId.newBuilder();"
+        errorLine2="                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnimatedImageFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnimatedImageFormat("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedImageFormat.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        ResourceProto.AnimatedImageFormat.forNumber(animatedImageFormat));"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setResourceId(resourceId);"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setStartTrigger(startTrigger.toTriggerProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.getAnimatedImageFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getAnimatedImageFormat().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedImageFormat.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getAnimatedImageFormat().getNumber();"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getResourceId();"
+        errorLine2="                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.hasProgress can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasProgress()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.getProgress can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DynamicBuilders.dynamicFloatFromProto(mImpl.getProgress());"
+        errorLine2="                                                                   ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidSeekableAnimatedImageResourceByResId.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ResourceProto.AndroidSeekableAnimatedImageResourceByResId.newBuilder();"
+        errorLine2="                                                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnimatedImageFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAnimatedImageFormat("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AnimatedImageFormat.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        ResourceProto.AnimatedImageFormat.forNumber(animatedImageFormat));"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setResourceId(resourceId);"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setProgress can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setProgress(progress.toDynamicFloatProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAndroidResourceByResId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return AndroidImageResourceByResId.fromProto(mImpl.getAndroidResourceByResId());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasInlineResource()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return InlineImageResource.fromProto(mImpl.getInlineResource());"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAndroidAnimatedResourceByResId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        mImpl.getAndroidAnimatedResourceByResId());"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasAndroidSeekableAnimatedResourceByResId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                        mImpl.getAndroidSeekableAnimatedResourceByResId());"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ResourceProto.ImageResource.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAndroidResourceByResId(androidResourceByResId.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setInlineResource(inlineResource.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAndroidAnimatedResourceByResId(androidAnimatedResourceByResId.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidSeekableAnimatedResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setAndroidSeekableAnimatedResourceByResId("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getVersion();"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    mImpl.getIdToImageMap().entrySet()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    ResourceProto.Resources.newBuilder();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setVersion(version);"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putIdToImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.putIdToImage(id, image.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.getLastClickableId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getLastClickableId();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.getIdToValueMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    mImpl.getIdToValueMap().entrySet()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final StateProto.State.Builder mImpl = StateProto.State.newBuilder();"
+        errorLine2="                                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getIdToValueMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.getIdToValueMap().size() >= getMaxStateEntryCount()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putIdToValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.putIdToValue(sourceKey.getKey(), value.toDynamicDataValueProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getIdToValueMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.getIdToValueMap().size() > getMaxStateEntryCount()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.getIdToValueMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                                    mImpl.getIdToValueMap().size(), getMaxStateEntryCount()));"
+        errorLine2="                                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getStartMillis();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getEndMillis();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    TimelineProto.TimeInterval.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setStartMillis(startMillis);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setEndMillis(endMillis);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasValidity()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return TimeInterval.fromProto(mImpl.getValidity());"
+        errorLine2="                                                    ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasLayout()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return Layout.fromProto(mImpl.getLayout());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    TimelineProto.TimelineEntry.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValidity(validity.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setLayout(layout.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.getTimelineEntriesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            for (TimelineProto.TimelineEntry item : mImpl.getTimelineEntriesList()) {"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    TimelineProto.Timeline.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addTimelineEntries can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.addTimelineEntries(timelineEntry.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOnLoadTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return TriggerProto.Trigger.newBuilder().setOnLoadTrigger(mImpl).build();"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return TriggerProto.Trigger.newBuilder().setOnLoadTrigger(mImpl).build();"
+        errorLine2="                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OnLoadTrigger.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    TriggerProto.OnLoadTrigger.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OnConditionMetTrigger.hasCondition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasCondition()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OnConditionMetTrigger.getCondition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DynamicBuilders.dynamicBoolFromProto(mImpl.getCondition());"
+        errorLine2="                                                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOnConditionMetTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return TriggerProto.Trigger.newBuilder().setOnConditionMetTrigger(mImpl).build();"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return TriggerProto.Trigger.newBuilder().setOnConditionMetTrigger(mImpl).build();"
+        errorLine2="                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="OnConditionMetTrigger.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                    TriggerProto.OnConditionMetTrigger.newBuilder();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCondition can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setCondition(dynamicBool.toDynamicBoolProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.hasOnLoadTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasOnLoadTrigger()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getOnLoadTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return OnLoadTrigger.fromProto(proto.getOnLoadTrigger(), fingerprint);"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.hasOnConditionMetTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="        if (proto.hasOnConditionMetTrigger()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Trigger.getOnConditionMetTrigger can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return OnConditionMetTrigger.fromProto(proto.getOnConditionMetTrigger(), fingerprint);"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TriggerBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValueForLayout();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getTextAlignmentForLayoutValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getTextAlignmentForLayoutValue();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final TypesProto.StringProp.Builder mImpl = TypesProto.StringProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValueForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValueForLayout(patternForLayout);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTextAlignmentForLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setTextAlignmentForLayout(AlignmentProto.TextAlignment.forNumber(alignment));"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setTextAlignmentForLayout(AlignmentProto.TextAlignment.forNumber(alignment));"
+        errorLine2="                                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final TypesProto.Int32Prop.Builder mImpl = TypesProto.Int32Prop.newBuilder();"
+        errorLine2="                                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasDynamicValue()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DynamicBuilders.dynamicStringFromProto(mImpl.getDynamicValue());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final TypesProto.StringProp.Builder mImpl = TypesProto.StringProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDynamicValue(dynamicValue.toDynamicStringProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            if (mImpl.hasDynamicValue()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.getDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                return DynamicBuilders.dynamicFloatFromProto(mImpl.getDynamicValue());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final TypesProto.FloatProp.Builder mImpl = TypesProto.FloatProp.newBuilder();"
+        errorLine2="                                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setDynamicValue(dynamicValue.toDynamicFloatProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasDynamicValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.hasValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                if (mImpl.hasDynamicValue() &amp;&amp; !mImpl.hasValue()) {"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="            private final TypesProto.BoolProp.Builder mImpl = TypesProto.BoolProp.newBuilder();"
+        errorLine2="                                                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.protolayout`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/protolayout/TypeBuilders.java"/>
+    </issue>
+
+</issues>
diff --git a/wear/tiles/tiles-material/lint-baseline.xml b/wear/tiles/tiles-material/lint-baseline.xml
index a0b4b5f..c4c5193 100644
--- a/wear/tiles/tiles-material/lint-baseline.xml
+++ b/wear/tiles/tiles-material/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="BanThreadSleep"
@@ -20,6 +20,24 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="Modifiers.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.Modifiers.newBuilder(modifiers.toProto())"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/material/Text.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMetadata can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            .setMetadata("
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/material/Text.java"/>
+    </issue>
+
+    <issue
         id="UnsafeOptInUsageError"
         message="This declaration is opt-in and its usage should be marked with `@androidx.wear.tiles.TilesExperimental` or `@OptIn(markerClass = androidx.wear.tiles.TilesExperimental.class)`"
         errorLine1="                .setVariant(variant)"
diff --git a/wear/tiles/tiles-proto/build.gradle b/wear/tiles/tiles-proto/build.gradle
index 6b05bec..d20f939 100644
--- a/wear/tiles/tiles-proto/build.gradle
+++ b/wear/tiles/tiles-proto/build.gradle
@@ -82,8 +82,8 @@
 afterEvaluate {
     lint {
         lintOptions {
-            // protobuf generates unannotated and synthetic accessor methods
-            disable("UnknownNullness", "SyntheticAccessor")
+            // protobuf generates unannotated methods
+            disable("UnknownNullness")
         }
     }
 }
diff --git a/wear/tiles/tiles-renderer/lint-baseline.xml b/wear/tiles/tiles-renderer/lint-baseline.xml
index 5498c78f..f47a33a 100644
--- a/wear/tiles/tiles-renderer/lint-baseline.xml
+++ b/wear/tiles/tiles-renderer/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
 
     <issue
         id="UnspecifiedRegisterReceiverFlag"
@@ -10,4 +10,634 @@
             file="src/main/java/androidx/wear/tiles/manager/TileUiClient.kt"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="Resources.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    res.toProto()"
+        errorLine2="                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.parseFrom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        val resources = ResourceProto.Resources.parseFrom(resourcesData.contents)"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            ResourceBuilders.Resources.fromProto(resources))"
+        errorLine2="                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="        val future = ResolvableFuture.create&lt;T>()"
+        errorLine2="                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        future.set(fn(it))"
+        errorLine2="                               ~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        future.set(fn(it))"
+        errorLine2="                                   ~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                future.setException(ex)"
+        errorLine2="                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/connection/DefaultTileClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        res -> ResourceBuilders.Resources.fromProto(res.toProto()),"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/client/TileClient.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                                StateBuilders.State.fromProto(nextState)));"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnimationEnabled can only be called from within the same library (androidx.wear.protolayout:protolayout-renderer)"
+        errorLine1="                        .setAnimationEnabled(true)"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIsViewFullyVisible can only be called from within the same library (androidx.wear.protolayout:protolayout-renderer)"
+        errorLine1="                        .setIsViewFullyVisible(true)"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setProtoLayoutTheme can only be called from within the same library (androidx.wear.protolayout:protolayout-renderer)"
+        errorLine1="            config.setProtoLayoutTheme(new ProtoLayoutThemeImpl(uiContext, tilesTheme));"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        androidx.wear.tiles.StateBuilders.State.fromProto(nextState.toProto()));"
+        errorLine2="                                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            checkNotNull(mLayout, errorMessage),"
+        errorLine2="                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            checkNotNull(mLayout, errorMessage),"
+        errorLine2="                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            checkNotNull(mLayout, errorMessage),"
+        errorLine2="                                                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            checkNotNull(mResources, errorMessage),"
+        errorLine2="                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            checkNotNull(mResources, errorMessage),"
+        errorLine2="                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            checkNotNull(mResources, errorMessage),"
+        errorLine2="                                                     ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        return inflateLayout(layout.toProto(), resources.toProto(), parent);"
+        errorLine2="                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        return inflateLayout(layout.toProto(), resources.toProto(), parent);"
+        errorLine2="                                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/renderer/TileRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        mCache = new TilesTimelineCacheInternal(timeline.toProto());"
+        errorLine2="                                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        return TimelineBuilders.TimelineEntry.fromProto(entry);"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        return TimelineBuilders.TimelineEntry.fromProto(entry);"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        return mCache.findCurrentTimelineEntryExpiry(entry.toProto(), fromTimeMillis);"
+        errorLine2="                                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineCache.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.getTimelineEntriesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        for (TimelineEntry entry : mTimeline.getTimelineEntriesList()) {"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (!entry.hasValidity()) {"
+        errorLine2="                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                TimeInterval validity = entry.getValidity();"
+        errorLine2="                                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                long validityLength = validity.getEndMillis() - validity.getStartMillis();"
+        errorLine2="                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                long validityLength = validity.getEndMillis() - validity.getStartMillis();"
+        errorLine2="                                                                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                if (validity.getStartMillis() &lt;= timeMillis"
+        errorLine2="                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        &amp;&amp; timeMillis &lt; validity.getEndMillis()) {"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.getTimelineEntriesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        for (TimelineEntry entry : mTimeline.getTimelineEntriesList()) {"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (!entry.hasValidity()) {"
+        errorLine2="                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            TimeInterval validity = entry.getValidity();"
+        errorLine2="                                          ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (validity.getStartMillis() &lt;= timeMillis &amp;&amp; timeMillis &lt; validity.getEndMillis()) {"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (validity.getStartMillis() &lt;= timeMillis &amp;&amp; timeMillis &lt; validity.getEndMillis()) {"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (validity.getStartMillis() > timeMillis) {"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                error = validity.getStartMillis() - timeMillis;"
+        errorLine2="                                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                error = timeMillis - validity.getEndMillis();"
+        errorLine2="                                              ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (entry.hasValidity() &amp;&amp; entry.getValidity().getEndMillis() > fromTimeMillis) {"
+        errorLine2="                                                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (entry.hasValidity() &amp;&amp; entry.getValidity().getEndMillis() > fromTimeMillis) {"
+        errorLine2="                                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (entry.hasValidity() &amp;&amp; entry.getValidity().getEndMillis() > fromTimeMillis) {"
+        errorLine2="                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            currentSmallestExpiry = entry.getValidity().getEndMillis();"
+        errorLine2="                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            currentSmallestExpiry = entry.getValidity().getEndMillis();"
+        errorLine2="                                          ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    entry.getValidity().getEndMillis() - entry.getValidity().getStartMillis();"
+        errorLine2="                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    entry.getValidity().getEndMillis() - entry.getValidity().getStartMillis();"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    entry.getValidity().getEndMillis() - entry.getValidity().getStartMillis();"
+        errorLine2="                          ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    entry.getValidity().getEndMillis() - entry.getValidity().getStartMillis();"
+        errorLine2="                                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.getTimelineEntriesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        for (TimelineEntry nextEntry : mTimeline.getTimelineEntriesList()) {"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (!nextEntry.hasValidity()) {"
+        errorLine2="                           ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            TimeInterval nextEntryValidity = nextEntry.getValidity();"
+        errorLine2="                                                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (entry.hasValidity()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                if (nextEntryValidity.getStartMillis() > entry.getValidity().getEndMillis()"
+        errorLine2="                                                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                if (nextEntryValidity.getStartMillis() > entry.getValidity().getEndMillis()"
+        errorLine2="                                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                if (nextEntryValidity.getStartMillis() > entry.getValidity().getEndMillis()"
+        errorLine2="                                                               ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        || nextEntryValidity.getStartMillis()"
+        errorLine2="                                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                &lt; entry.getValidity().getStartMillis()) {"
+        errorLine2="                                                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                &lt; entry.getValidity().getStartMillis()) {"
+        errorLine2="                                        ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (nextEntryValidity.getStartMillis() > currentSmallestExpiry) {"
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (nextEntryValidity.getStartMillis() &lt; fromTimeMillis) {"
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    nextEntryValidity.getEndMillis() - nextEntryValidity.getStartMillis();"
+        errorLine2="                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    nextEntryValidity.getEndMillis() - nextEntryValidity.getStartMillis();"
+        errorLine2="                                                                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                currentSmallestExpiry = nextEntryValidity.getStartMillis();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        return timeInterval.getEndMillis() > timeInterval.getStartMillis();"
+        errorLine2="                            ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        return timeInterval.getEndMillis() > timeInterval.getStartMillis();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/internal/TilesTimelineCacheInternal.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                                entry.getLayout())));"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        timeline.toProto(),"
+        errorLine2="                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        LayoutElementBuilders.Layout.fromProto(entry.getLayout())));"
+        errorLine2="                                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        LayoutElementBuilders.Layout.fromProto(entry.getLayout())));"
+        errorLine2="                                                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/timeline/TilesTimelineManager.java"/>
+    </issue>
+
 </issues>
diff --git a/wear/tiles/tiles/lint-baseline.xml b/wear/tiles/tiles/lint-baseline.xml
index 8dbfc75..52ebdb2 100644
--- a/wear/tiles/tiles/lint-baseline.xml
+++ b/wear/tiles/tiles/lint-baseline.xml
@@ -4,8 +4,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.wear.tiles.ResourcesData;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface ResourcesCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/tiles/ResourcesCallback.aidl"/>
     </issue>
@@ -14,21 +14,25 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ResourcesData;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/ResourcesData.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ResourcesRequestData;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/ResourcesRequestData.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable TileAddEventData;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileAddEventData.aidl"/>
     </issue>
@@ -36,8 +40,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.wear.tiles.TileData;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface TileCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileCallback.aidl"/>
     </issue>
@@ -46,7 +50,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable TileData;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileData.aidl"/>
     </issue>
@@ -62,7 +66,9 @@
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable TileLeaveEventData;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileLeaveEventData.aidl"/>
     </issue>
@@ -70,8 +76,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import android.widget.RemoteViews;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface TileProvider {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileProvider.aidl"/>
     </issue>
@@ -80,14 +86,16 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable TileRemoveEventData;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileRemoveEventData.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable TileRequestData;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileRequestData.aidl"/>
     </issue>
@@ -96,7 +104,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable TileUpdateRequestData;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileUpdateRequestData.aidl"/>
     </issue>
@@ -104,10 +112,10855 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import android.content.ComponentName;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface TileUpdateRequesterService {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/tiles/TileUpdateRequesterService.aidl"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="AndroidStringExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setStringVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setStringVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidStringExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.AndroidStringExtra.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1281351679);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidIntExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setIntVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setIntVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidIntExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.AndroidIntExtra.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1929293734);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidLongExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setLongVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setLongVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidLongExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.AndroidLongExtra.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-874743180);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Long.hashCode(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidDoubleExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setDoubleVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setDoubleVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidDoubleExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.AndroidDoubleExtra.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-278689892);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Double.hashCode(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidBooleanExtra.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setBooleanVal(mImpl).build();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.AndroidExtra.newBuilder().setBooleanVal(mImpl).build();"
+        errorLine2="                                                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidBooleanExtra.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.AndroidBooleanExtra.newBuilder();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1238672683);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Boolean.hashCode(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasStringVal()) {"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getStringVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return AndroidStringExtra.fromProto(proto.getStringVal());"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasIntVal()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getIntVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return AndroidIntExtra.fromProto(proto.getIntVal());"
+        errorLine2="                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasLongVal()) {"
+        errorLine2="                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getLongVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return AndroidLongExtra.fromProto(proto.getLongVal());"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasDoubleVal()) {"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getDoubleVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return AndroidDoubleExtra.fromProto(proto.getDoubleVal());"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.hasBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasBooleanVal()) {"
+        errorLine2="                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidExtra.getBooleanVal can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return AndroidBooleanExtra.fromProto(proto.getBooleanVal());"
+        errorLine2="                                                       ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getPackageName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getPackageName();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getClassName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getClassName();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.getKeyToExtraMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.getKeyToExtraMap().entrySet().stream()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidActivity.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.AndroidActivity.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1939606345);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPackageName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setPackageName(packageName);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, packageName.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClassName can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setClassName(className);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(2, className.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putKeyToExtra can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.putKeyToExtra(key, extra.toAndroidExtraProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        key.hashCode(), checkNotNull(extra.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        key.hashCode(), checkNotNull(extra.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        key.hashCode(), checkNotNull(extra.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.hasAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasAndroidActivity()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.getAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return AndroidActivity.fromProto(mImpl.getAndroidActivity());"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLaunchAction(mImpl).build();"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLaunchAction(mImpl).build();"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LaunchAction.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.LaunchAction.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(175064445);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidActivity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAndroidActivity(androidActivity.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(androidActivity.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(androidActivity.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(androidActivity.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LoadAction.hasRequestState can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasRequestState()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LoadAction.getRequestState can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return StateBuilders.State.fromProto(mImpl.getRequestState());"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLoadAction(mImpl).build();"
+        errorLine2="                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ActionProto.Action.newBuilder().setLoadAction(mImpl).build();"
+        errorLine2="                                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LoadAction.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ActionProto.LoadAction.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1728161517);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRequestState can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRequestState(requestState.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(requestState.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(requestState.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(requestState.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.hasLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasLaunchAction()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLaunchAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LaunchAction.fromProto(proto.getLaunchAction());"
+        errorLine2="                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.hasLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasLoadAction()) {"
+        errorLine2="                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Action.getLoadAction can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LoadAction.fromProto(proto.getLoadAction());"
+        errorLine2="                                              ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ActionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.getArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getArgb();"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final ColorProto.ColorProp.Builder mImpl = ColorProto.ColorProp.newBuilder();"
+        errorLine2="                                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1332287496);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setArgb can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setArgb(argb);"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, argb);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ColorBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenWidthDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getScreenWidthDp();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenHeightDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getScreenHeightDp();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenDensity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getScreenDensity();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getDevicePlatform can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getDevicePlatform().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DevicePlatform.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getDevicePlatform().getNumber();"
+        errorLine2="                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getScreenShape can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getScreenShape().getNumber();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ScreenShape.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getScreenShape().getNumber();"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    DeviceParametersProto.DeviceParameters.newBuilder();"
+        errorLine2="                                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenWidthDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setScreenWidthDp(screenWidthDp);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenHeightDp can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setScreenHeightDp(screenHeightDp);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenDensity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setScreenDensity(screenDensity);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setDevicePlatform can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setDevicePlatform("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DevicePlatform.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        DeviceParametersProto.DevicePlatform.forNumber(devicePlatform));"
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setScreenShape can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setScreenShape(DeviceParametersProto.ScreenShape.forNumber(screenShape));"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ScreenShape.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setScreenShape(DeviceParametersProto.ScreenShape.forNumber(screenShape));"
+        errorLine2="                                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DeviceParametersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.SpacerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.SpacerDimension.newBuilder().setLinearDimension(mImpl).build();"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DpProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final DimensionProto.DpProp.Builder mImpl = DimensionProto.DpProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(752970309);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final DimensionProto.SpProp.Builder mImpl = DimensionProto.SpProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-2144685857);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(2, Float.floatToIntBits(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EmProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="EmProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final DimensionProto.EmProp.Builder mImpl = DimensionProto.EmProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1628313311);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DegreesProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    DimensionProto.DegreesProp.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(405060347);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder()"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    .setExpandedDimension(mImpl)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setExpandedDimension(mImpl).build();"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder().setExpandedDimension(mImpl).build();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ExpandedDimensionProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    DimensionProto.ExpandedDimensionProp.newBuilder();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1053378170);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ContainerDimension.newBuilder()"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    .setWrappedDimension(mImpl)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WrappedDimensionProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    DimensionProto.WrappedDimensionProp.newBuilder();"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-113456542);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.getAspectRatioWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getAspectRatioWidth();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.getAspectRatioHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getAspectRatioHeight();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DimensionProto.ImageDimension.newBuilder()"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    .setProportionalDimension(mImpl)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ProportionalDimensionProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    DimensionProto.ProportionalDimensionProp.newBuilder();"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-2079046835);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAspectRatioWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAspectRatioWidth(aspectRatioWidth);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, aspectRatioWidth);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAspectRatioHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAspectRatioHeight(aspectRatioHeight);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(2, aspectRatioHeight);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasLinearDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DpProp.fromProto(proto.getLinearDimension());"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasExpandedDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ExpandedDimensionProp.fromProto(proto.getExpandedDimension());"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.hasWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasWrappedDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContainerDimension.getWrappedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return WrappedDimensionProp.fromProto(proto.getWrappedDimension());"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasLinearDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DpProp.fromProto(proto.getLinearDimension());"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasExpandedDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getExpandedDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ExpandedDimensionProp.fromProto(proto.getExpandedDimension());"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.hasProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasProportionalDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageDimension.getProportionalDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ProportionalDimensionProp.fromProto(proto.getProportionalDimension());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.hasLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasLinearDimension()) {"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpacerDimension.getLinearDimension can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return DpProp.fromProto(proto.getLinearDimension());"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/DimensionBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    AlignmentProto.HorizontalAlignmentProp.newBuilder();"
+        errorLine2="                                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-384830516);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.HorizontalAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.HorizontalAlignment.forNumber(value));"
+        errorLine2="                                                                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    AlignmentProto.VerticalAlignmentProp.newBuilder();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1443510393);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.VerticalAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.VerticalAlignment.forNumber(value));"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeightProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeightProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.FontWeightProp.newBuilder();"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1793388920);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontWeight.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontWeight.forNumber(value));"
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariantProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariantProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.FontVariantProp.newBuilder();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-293831500);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontVariant.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.FontVariant.forNumber(value));"
+        errorLine2="                                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.SpanVerticalAlignmentProp.newBuilder();"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1008812329);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.SpanVerticalAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.SpanVerticalAlignment.forNumber(value));"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasSize()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.SpProp.fromProto(mImpl.getSize());"
+        errorLine2="                                                                ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasItalic()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.BoolProp.fromProto(mImpl.getItalic());"
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasUnderline()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.BoolProp.fromProto(mImpl.getUnderline());"
+        errorLine2="                                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ColorBuilders.ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return FontWeightProp.fromProto(mImpl.getWeight());"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasLetterSpacing()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.EmProp.fromProto(mImpl.getLetterSpacing());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.hasVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasVariant()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.getVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return FontVariantProp.fromProto(mImpl.getVariant());"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontStyle.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.FontStyle.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(181264306);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSize can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setSize(size.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(size.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(size.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(size.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setItalic(italic.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(italic.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(italic.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(italic.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setItalic(TypesProto.BoolProp.newBuilder().setValue(italic));"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setItalic can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setItalic(TypesProto.BoolProp.newBuilder().setValue(italic));"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setItalic(TypesProto.BoolProp.newBuilder().setValue(italic));"
+        errorLine2="                                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(2, Boolean.hashCode(italic));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setUnderline(underline.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(underline.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(underline.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(underline.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setUnderline(TypesProto.BoolProp.newBuilder().setValue(underline));"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setUnderline can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setUnderline(TypesProto.BoolProp.newBuilder().setValue(underline));"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setUnderline(TypesProto.BoolProp.newBuilder().setValue(underline));"
+        errorLine2="                                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(3, Boolean.hashCode(underline));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWeight(weight.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(weight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(weight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(weight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWeight("
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeightProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        LayoutElementProto.FontWeightProp.newBuilder()"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.FontWeight.forNumber(weight)));"
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontWeight.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.FontWeight.forNumber(weight)));"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(5, weight);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLetterSpacing can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setLetterSpacing(letterSpacing.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(letterSpacing.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(letterSpacing.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(letterSpacing.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVariant(variant.toProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(variant.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(variant.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(variant.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVariant can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVariant("
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariantProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        LayoutElementProto.FontVariantProp.newBuilder()"
+        errorLine2="                                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.FontVariant.forNumber(variant)));"
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FontVariant.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.FontVariant.forNumber(variant)));"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(7, variant);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignmentProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    AlignmentProto.TextAlignmentProp.newBuilder();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(797507251);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.TextAlignment.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.TextAlignment.forNumber(value));"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflowProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflowProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.TextOverflowProp.newBuilder();"
+        errorLine2="                                                        ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1183432233);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.TextOverflow.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.TextOverflow.forNumber(value));"
+        errorLine2="                                                               ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorTypeProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorTypeProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    AlignmentProto.ArcAnchorTypeProp.newBuilder();"
+        errorLine2="                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1193249074);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.ArcAnchorType.forNumber(value));"
+        errorLine2="                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(AlignmentProto.ArcAnchorType.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasText()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.StringProp.fromProto(mImpl.getText());"
+        errorLine2="                                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasFontStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return FontStyle.fromProto(mImpl.getFontStyle());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasMaxLines()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.Int32Prop.fromProto(mImpl.getMaxLines());"
+        errorLine2="                                                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasMultilineAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TextAlignmentProp.fromProto(mImpl.getMultilineAlignment());"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasOverflow()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TextOverflowProp.fromProto(mImpl.getOverflow());"
+        errorLine2="                                                        ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.hasLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasLineHeight()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.getLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.SpProp.fromProto(mImpl.getLineHeight());"
+        errorLine2="                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Text.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Text.newBuilder();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1976530157);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(text.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.mergeText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.mergeText(TypesProto.StringProp.newBuilder().setValue(text).build());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.mergeText(TypesProto.StringProp.newBuilder().setValue(text).build());"
+        errorLine2="                                                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.mergeText(TypesProto.StringProp.newBuilder().setValue(text).build());"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, text.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setFontStyle(fontStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(maxLines.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));"
+        errorLine2="                                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(4, maxLines);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMultilineAlignment(multilineAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(multilineAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(multilineAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(multilineAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMultilineAlignment("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.TextAlignmentProp.newBuilder()"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        AlignmentProto.TextAlignment.forNumber("
+        errorLine2="                                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(5, multilineAlignment);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setOverflow(overflow.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setOverflow("
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflowProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        LayoutElementProto.TextOverflowProp.newBuilder()"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.TextOverflow.forNumber(overflow)));"
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.TextOverflow.forNumber(overflow)));"
+        errorLine2="                                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(6, overflow);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setLineHeight(lineHeight.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleModeProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue().getNumber();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleModeProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.ContentScaleModeProp.newBuilder();"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-893830536);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.ContentScaleMode.forNumber(value));"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(LayoutElementProto.ContentScaleMode.forNumber(value));"
+        errorLine2="                                                                   ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.hasTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasTint()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.getTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ColorBuilders.ColorProp.fromProto(mImpl.getTint());"
+        errorLine2="                                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ColorFilter.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.ColorFilter.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(181311326);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setTint(tint.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(tint.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(tint.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(tint.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasResourceId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.StringProp.fromProto(mImpl.getResourceId());"
+        errorLine2="                                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.imageDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.imageDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasContentScaleMode()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ContentScaleModeProp.fromProto(mImpl.getContentScaleMode());"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.hasColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasColorFilter()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.getColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ColorFilter.fromProto(mImpl.getColorFilter());"
+        errorLine2="                                                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Image.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Image.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-543078544);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(resourceId.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));"
+        errorLine2="                                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, resourceId.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidth(width.toImageDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHeight(height.toImageDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setContentScaleMode(contentScaleMode.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(contentScaleMode.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(contentScaleMode.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(contentScaleMode.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setContentScaleMode can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setContentScaleMode("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleModeProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        LayoutElementProto.ContentScaleModeProp.newBuilder()"
+        errorLine2="                                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ContentScaleMode.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        LayoutElementProto.ContentScaleMode.forNumber("
+        errorLine2="                                                                            ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(4, contentScaleMode);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColorFilter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setColorFilter(colorFilter.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(colorFilter.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(colorFilter.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(colorFilter.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.spacerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.spacerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spacer.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Spacer.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1748084575);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidth(width.toSpacerDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHeight(height.toSpacerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.getContentsList().stream()"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHorizontalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return HorizontalAlignmentProp.fromProto(mImpl.getHorizontalAlignment());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasVerticalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlignment());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setBox(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setBox(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Box.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Box.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1881256071);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.addContents(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHeight(height.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidth(width.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHorizontalAlignment(horizontalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        checkNotNull(horizontalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        checkNotNull(horizontalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        checkNotNull(horizontalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHorizontalAlignment("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.HorizontalAlignmentProp.newBuilder()"
+        errorLine2="                                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        AlignmentProto.HorizontalAlignment.forNumber("
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(4, horizontalAlignment);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVerticalAlignment(verticalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVerticalAlignment("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.VerticalAlignmentProp.newBuilder()"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        AlignmentProto.VerticalAlignment.forNumber("
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(5, verticalAlignment);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasText()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.StringProp.fromProto(mImpl.getText());"
+        errorLine2="                                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasFontStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return FontStyle.fromProto(mImpl.getFontStyle());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.SpanModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setText(mImpl).build();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanText.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.SpanText.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-221774557);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(text.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));"
+        errorLine2="                                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, text.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setFontStyle(fontStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasResourceId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.StringProp.fromProto(mImpl.getResourceId());"
+        errorLine2="                                                               ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getWidth());"
+        errorLine2="                                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getHeight());"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.SpanModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.hasAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.getAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return SpanVerticalAlignmentProp.fromProto(mImpl.getAlignment());"
+        errorLine2="                                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.Span.newBuilder().setImage(mImpl).build();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanImage.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.SpanImage.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(502289772);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(resourceId.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(resourceId.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));"
+        errorLine2="                                                                       ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(TypesProto.StringProp.newBuilder().setValue(resourceId));"
+        errorLine2="                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, resourceId.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidth(width.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHeight(height.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAlignment(alignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(alignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(alignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(alignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAlignment("
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        LayoutElementProto.SpanVerticalAlignmentProp.newBuilder()"
+        errorLine2="                                                                     ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanVerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        LayoutElementProto.SpanVerticalAlignment.forNumber("
+        errorLine2="                                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(5, alignment);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasText()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return SpanText.fromProto(proto.getText());"
+        errorLine2="                                            ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.hasImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasImage()) {"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Span.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return SpanImage.fromProto(proto.getImage());"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getSpansList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.getSpansList().stream()"
+        errorLine2="                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasMaxLines()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.Int32Prop.fromProto(mImpl.getMaxLines());"
+        errorLine2="                                                              ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasMultilineAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return HorizontalAlignmentProp.fromProto(mImpl.getMultilineAlignment());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasOverflow()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TextOverflowProp.fromProto(mImpl.getOverflow());"
+        errorLine2="                                                        ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.hasLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasLineHeight()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.getLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.SpProp.fromProto(mImpl.getLineHeight());"
+        errorLine2="                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpannable(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setSpannable(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Spannable.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Spannable.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1690284372);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addSpans can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.addSpans(span.toSpanProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(span.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(span.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(span.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(maxLines.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(maxLines.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMaxLines can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));"
+        errorLine2="                                                                    ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMaxLines(TypesProto.Int32Prop.newBuilder().setValue(maxLines));"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(3, maxLines);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMultilineAlignment(multilineAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(multilineAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(multilineAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(multilineAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMultilineAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMultilineAlignment("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.HorizontalAlignmentProp.newBuilder()"
+        errorLine2="                                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        AlignmentProto.HorizontalAlignment.forNumber("
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(4, multilineAlignment);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setOverflow(overflow.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(overflow.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOverflow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setOverflow("
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflowProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        LayoutElementProto.TextOverflowProp.newBuilder()"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.TextOverflow.forNumber(overflow)));"
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TextOverflow.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(LayoutElementProto.TextOverflow.forNumber(overflow)));"
+        errorLine2="                                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(5, overflow);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLineHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setLineHeight(lineHeight.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        7, checkNotNull(lineHeight.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.getContentsList().stream()"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHorizontalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return HorizontalAlignmentProp.fromProto(mImpl.getHorizontalAlignment());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setColumn(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setColumn(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Column.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Column.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1411218529);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.addContents(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHorizontalAlignment(horizontalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        checkNotNull(horizontalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        checkNotNull(horizontalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        checkNotNull(horizontalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHorizontalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHorizontalAlignment("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.HorizontalAlignmentProp.newBuilder()"
+        errorLine2="                                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="HorizontalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        AlignmentProto.HorizontalAlignment.forNumber("
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(2, horizontalAlignment);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidth(width.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHeight(height.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.getContentsList().stream()"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasVerticalAlignment()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlignment());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getWidth());"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasHeight()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.containerDimensionFromProto(mImpl.getHeight());"
+        errorLine2="                                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setRow(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setRow(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Row.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Row.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1537205448);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.addContents(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVerticalAlignment(verticalAlignment.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(verticalAlignment.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlignment can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVerticalAlignment("
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.VerticalAlignmentProp.newBuilder()"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        AlignmentProto.VerticalAlignment.forNumber("
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(2, verticalAlignment);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidth(width.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeight can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHeight(height.toContainerDimensionProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(height.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getContentsList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.getContentsList().stream()"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasAnchorAngle()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DegreesProp.fromProto(mImpl.getAnchorAngle());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasAnchorType()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ArcAnchorTypeProp.fromProto(mImpl.getAnchorType());"
+        errorLine2="                                                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasVerticalAlign()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return VerticalAlignmentProp.fromProto(mImpl.getVerticalAlign());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.Modifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setArc(mImpl).build();"
+        errorLine2="                                                                 ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.LayoutElement.newBuilder().setArc(mImpl).build();"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Arc.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Arc.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(299028337);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.addContents(content.toArcLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnchorAngle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAnchorAngle(anchorAngle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(anchorAngle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(anchorAngle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(anchorAngle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAnchorType(anchorType.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(anchorType.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(anchorType.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(anchorType.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAnchorType can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAnchorType("
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorTypeProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.ArcAnchorTypeProp.newBuilder()"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAnchorType.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(AlignmentProto.ArcAnchorType.forNumber(anchorType)));"
+        errorLine2="                                                                       ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue(AlignmentProto.ArcAnchorType.forNumber(anchorType)));"
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(3, anchorType);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVerticalAlign(verticalAlign.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(verticalAlign.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(verticalAlign.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(verticalAlign.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVerticalAlign can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVerticalAlign("
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignmentProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        AlignmentProto.VerticalAlignmentProp.newBuilder()"
+        errorLine2="                                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                .setValue("
+        errorLine2="                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="VerticalAlignment.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                        AlignmentProto.VerticalAlignment.forNumber(verticalAlign)));"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(4, verticalAlign);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasText()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.StringProp.fromProto(mImpl.getText());"
+        errorLine2="                                                               ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.hasFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasFontStyle()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return FontStyle.fromProto(mImpl.getFontStyle());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.ArcModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setText(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcText.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.ArcText.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(434391973);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(text.toProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(text.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));"
+        errorLine2="                                                                 ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setText(TypesProto.StringProp.newBuilder().setValue(text));"
+        errorLine2="                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, text.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFontStyle can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setFontStyle(fontStyle.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(fontStyle.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasLength()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DegreesProp.fromProto(mImpl.getLength());"
+        errorLine2="                                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasThickness()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getThickness());"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ColorBuilders.ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.ArcModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setLine(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLine can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setLine(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLine.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.ArcLine.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1371793535);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setLength(length.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setThickness(thickness.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.hasLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasLength()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DegreesProp.fromProto(mImpl.getLength());"
+        errorLine2="                                                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.hasThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasThickness()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getThickness());"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.hasModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasModifiers()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.getModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ModifiersBuilders.ArcModifiers.fromProto(mImpl.getModifiers());"
+        errorLine2="                                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setSpacer(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcSpacer.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.ArcSpacer.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-179760535);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLength can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setLength(length.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(length.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(thickness.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setThickness can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setThickness(thickness.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setModifiers can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setModifiers(modifiers.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(modifiers.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.hasContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasContent()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.getContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return LayoutElementBuilders.layoutElementFromProto(mImpl.getContent());"
+        errorLine2="                                                                          ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.hasRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasRotateContents()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.getRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.BoolProp.fromProto(mImpl.getRotateContents());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setAdapter(mImpl).build();"
+        errorLine2="                                                       ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return LayoutElementProto.ArcLayoutElement.newBuilder().setAdapter(mImpl).build();"
+        errorLine2="                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcAdapter.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.ArcAdapter.newBuilder();"
+        errorLine2="                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(1696473935);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setContent can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setContent(content.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.addChildNode can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                          ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.addChildNode(checkNotNull(content.getFingerprint()));"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRotateContents(rotateContents.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(rotateContents.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(rotateContents.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(rotateContents.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRotateContents(TypesProto.BoolProp.newBuilder().setValue(rotateContents));"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRotateContents can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRotateContents(TypesProto.BoolProp.newBuilder().setValue(rotateContents));"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRotateContents(TypesProto.BoolProp.newBuilder().setValue(rotateContents));"
+        errorLine2="                                                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(2, Boolean.hashCode(rotateContents));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasColumn()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getColumn can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Column.fromProto(proto.getColumn(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasRow()) {"
+        errorLine2="                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getRow can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Row.fromProto(proto.getRow(), fingerprint);"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasBox()) {"
+        errorLine2="                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getBox can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Box.fromProto(proto.getBox(), fingerprint);"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasSpacer()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Spacer.fromProto(proto.getSpacer(), fingerprint);"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasText()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Text.fromProto(proto.getText(), fingerprint);"
+        errorLine2="                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasImage()) {"
+        errorLine2="                  ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Image.fromProto(proto.getImage(), fingerprint);"
+        errorLine2="                                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasArc()) {"
+        errorLine2="                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getArc can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Arc.fromProto(proto.getArc(), fingerprint);"
+        errorLine2="                                       ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.hasSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasSpannable()) {"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="LayoutElement.getSpannable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return Spannable.fromProto(proto.getSpannable(), fingerprint);"
+        errorLine2="                                             ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasText()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getText can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ArcText.fromProto(proto.getText());"
+        errorLine2="                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasLine can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasLine()) {"
+        errorLine2="                  ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getLine can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ArcLine.fromProto(proto.getLine());"
+        errorLine2="                                           ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasSpacer()) {"
+        errorLine2="                  ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getSpacer can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ArcSpacer.fromProto(proto.getSpacer());"
+        errorLine2="                                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.hasAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="        if (proto.hasAdapter()) {"
+        errorLine2="                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcLayoutElement.getAdapter can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return ArcAdapter.fromProto(proto.getAdapter());"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.hasRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasRoot()) {"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.getRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return LayoutElementBuilders.layoutElementFromProto(mImpl.getRoot());"
+        errorLine2="                                                                          ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.parseFrom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return fromProto(LayoutElementProto.Layout.parseFrom(byteArray));"
+        errorLine2="                                                           ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Layout.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    LayoutElementProto.Layout.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRoot(root.toLayoutElementProto());"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFingerprint can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.setFingerprint("
+        errorLine2="                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRoot can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            TreeFingerprint.newBuilder().setRoot(fingerprintToProto(fingerprint)));"
+        errorLine2="                                                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TreeFingerprint.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                            TreeFingerprint.newBuilder().setRoot(fingerprintToProto(fingerprint)));"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="NodeFingerprint.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        FingerprintProto.NodeFingerprint.newBuilder();"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.selfTypeValue can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                if (fingerprint.selfTypeValue() != 0) {"
+        errorLine2="                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSelfTypeValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    builder.setSelfTypeValue(fingerprint.selfTypeValue());"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.selfTypeValue can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    builder.setSelfTypeValue(fingerprint.selfTypeValue());"
+        errorLine2="                                                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.selfPropsValue can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                if (fingerprint.selfPropsValue() != 0) {"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSelfPropsValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    builder.setSelfPropsValue(fingerprint.selfPropsValue());"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.selfPropsValue can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    builder.setSelfPropsValue(fingerprint.selfPropsValue());"
+        errorLine2="                                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.childNodesValue can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                if (fingerprint.childNodesValue() != 0) {"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setChildNodesValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    builder.setChildNodesValue(fingerprint.childNodesValue());"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.childNodesValue can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    builder.setChildNodesValue(fingerprint.childNodesValue());"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.childNodes can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                for (Fingerprint childNode : fingerprint.childNodes()) {"
+        errorLine2="                                                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addChildNodes can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    builder.addChildNodes(fingerprintToProto(childNode));"
+        errorLine2="                            ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/LayoutElementBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getId();"
+        errorLine2="                         ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.hasOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasOnClick()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.getOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ActionBuilders.actionFromProto(mImpl.getOnClick());"
+        errorLine2="                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Clickable.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.Clickable.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(595587995);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setId(id);"
+        errorLine2="                      ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, id.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setOnClick can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setOnClick(onClick.toActionProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(onClick.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(onClick.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(onClick.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.getObsoleteContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getObsoleteContentDescription();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Semantics.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.Semantics.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1479823155);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setObsoleteContentDescription can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setObsoleteContentDescription(contentDescription);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(4, contentDescription.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasEnd()) {"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getEnd());"
+        errorLine2="                                                                ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasStart()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getStart());"
+        errorLine2="                                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasTop()) {"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getTop());"
+        errorLine2="                                                                ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasBottom()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getBottom());"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.hasRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasRtlAware()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.getRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TypeBuilders.BoolProp.fromProto(mImpl.getRtlAware());"
+        errorLine2="                                                             ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Padding.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.Padding.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1120275440);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEnd can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setEnd(end.toProto());"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(end.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(end.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(end.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStart can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setStart(start.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(start.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(start.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(start.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTop can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setTop(top.toProto());"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(top.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(top.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(top.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBottom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setBottom(bottom.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(bottom.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(bottom.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(bottom.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRtlAware(rtlAware.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(rtlAware.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(rtlAware.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(rtlAware.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRtlAware(TypesProto.BoolProp.newBuilder().setValue(rtlAware));"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRtlAware can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRtlAware(TypesProto.BoolProp.newBuilder().setValue(rtlAware));"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRtlAware(TypesProto.BoolProp.newBuilder().setValue(rtlAware));"
+        errorLine2="                                                                   ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(5, Boolean.hashCode(rtlAware));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.hasWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasWidth()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.getWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getWidth());"
+        errorLine2="                                                                ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ColorBuilders.ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Border.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final ModifiersProto.Border.Builder mImpl = ModifiersProto.Border.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(2085330827);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidth can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidth(width.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(width.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Corner.hasRadius can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasRadius()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Corner.getRadius can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DimensionBuilders.DpProp.fromProto(mImpl.getRadius());"
+        errorLine2="                                                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Corner.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final ModifiersProto.Corner.Builder mImpl = ModifiersProto.Corner.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-623478338);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRadius can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setRadius(radius.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(radius.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(radius.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(radius.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.hasColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasColor()) {"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.getColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ColorBuilders.ColorProp.fromProto(mImpl.getColor());"
+        errorLine2="                                                               ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.hasCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasCorner()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.getCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Corner.fromProto(mImpl.getCorner());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Background.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.Background.newBuilder();"
+        errorLine2="                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(374507572);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setColor can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setColor(color.toProto());"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(color.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setCorner can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setCorner(corner.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(corner.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(corner.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(corner.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ElementMetadata.getTagData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getTagData().toByteArray();"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ElementMetadata.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.ElementMetadata.newBuilder();"
+        errorLine2="                                                   ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-589294723);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setTagData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setTagData(ByteString.copyFrom(tagData));"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Arrays.hashCode(tagData));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Clickable.fromProto(mImpl.getClickable());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasSemantics()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Semantics.fromProto(mImpl.getSemantics());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasPadding()) {"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Padding.fromProto(mImpl.getPadding());"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasBorder()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Border.fromProto(mImpl.getBorder());"
+        errorLine2="                                              ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasBackground()) {"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Background.fromProto(mImpl.getBackground());"
+        errorLine2="                                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.hasMetadata can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasMetadata()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.getMetadata can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return ElementMetadata.fromProto(mImpl.getMetadata());"
+        errorLine2="                                                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Modifiers.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.Modifiers.newBuilder();"
+        errorLine2="                                             ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-170942531);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setClickable(clickable.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setSemantics(semantics.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setPadding can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setPadding(padding.toProto());"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(padding.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(padding.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        3, checkNotNull(padding.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBorder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setBorder(border.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(border.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(border.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        4, checkNotNull(border.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setBackground can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setBackground(background.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(background.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(background.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        5, checkNotNull(background.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setMetadata can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setMetadata(metadata.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(metadata.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(metadata.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        6, checkNotNull(metadata.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Clickable.fromProto(mImpl.getClickable());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.hasSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasSemantics()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.getSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Semantics.fromProto(mImpl.getSemantics());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ArcModifiers.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.ArcModifiers.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1648736168);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setClickable(clickable.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setSemantics can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setSemantics(semantics.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        2, checkNotNull(semantics.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.hasClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasClickable()) {"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.getClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Clickable.fromProto(mImpl.getClickable());"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="SpanModifiers.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ModifiersProto.SpanModifiers.newBuilder();"
+        errorLine2="                                                 ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1318656482);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setClickable can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setClickable(clickable.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate("
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.aggregateValueAsInt can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        1, checkNotNull(clickable.getFingerprint()).aggregateValueAsInt());"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ModifiersBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DeviceParameters.fromProto(mImpl.getDeviceConfiguration());"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DeviceParameters.fromProto("
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        DeviceParametersProto.DeviceParameters.getDefaultInstance());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return State.fromProto(mImpl.getCurrentState());"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return State.fromProto(StateProto.State.getDefaultInstance());"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return State.fromProto(StateProto.State.getDefaultInstance());"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setDeviceConfiguration(deviceConfiguration.toProto());"
+        errorLine2="                                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setCurrentState(currentState.toProto());"
+        errorLine2="                                                   ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DeviceParameters.fromProto(mImpl.getDeviceConfiguration());"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return DeviceParameters.fromProto("
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.getDefaultInstance can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        DeviceParametersProto.DeviceParameters.getDefaultInstance());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setDeviceConfiguration(deviceConfiguration.toProto());"
+        errorLine2="                                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/RequestBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByResId.getResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getResourceId();"
+        errorLine2="                         ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AndroidImageResourceByResId.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ResourceProto.AndroidImageResourceByResId.newBuilder();"
+        errorLine2="                                                              ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setResourceId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setResourceId(resourceId);"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getData().toByteArray();"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getWidthPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getWidthPx();"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getHeightPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getHeightPx();"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.getNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getFormat().getNumber();"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.getFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getFormat().getNumber();"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="InlineImageResource.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ResourceProto.InlineImageResource.newBuilder();"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setData can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setData(ByteString.copyFrom(data));"
+        errorLine2="                      ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setWidthPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setWidthPx(widthPx);"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setHeightPx can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setHeightPx(heightPx);"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setFormat can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setFormat(ResourceProto.ImageFormat.forNumber(format));"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageFormat.forNumber can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setFormat(ResourceProto.ImageFormat.forNumber(format));"
+        errorLine2="                                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasAndroidResourceByResId()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return AndroidImageResourceByResId.fromProto(mImpl.getAndroidResourceByResId());"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.hasInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasInlineResource()) {"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.getInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return InlineImageResource.fromProto(mImpl.getInlineResource());"
+        errorLine2="                                                           ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ImageResource.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ResourceProto.ImageResource.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setAndroidResourceByResId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setAndroidResourceByResId(androidResourceByResId.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setInlineResource can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setInlineResource(inlineResource.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getVersion();"
+        errorLine2="                         ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.getIdToImageMap can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    mImpl.getIdToImageMap().entrySet()) {"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.parseFrom can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return fromProto(ResourceProto.Resources.parseFrom(byteArray));"
+        errorLine2="                                                         ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    ResourceProto.Resources.newBuilder();"
+        errorLine2="                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setVersion(version);"
+        errorLine2="                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.putIdToImage can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.putIdToImage(id, image.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/ResourceBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.getLastClickableId can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getLastClickableId();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final StateProto.State.Builder mImpl = StateProto.State.newBuilder();"
+        errorLine2="                                                                            ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(616326811);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/StateBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return Timeline.fromProto(mImpl.getTileTimeline());"
+        errorLine2="                                ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return State.fromProto(mImpl.getState());"
+        errorLine2="                             ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setTileTimeline(tileTimeline.toProto());"
+        errorLine2="                                                   ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="State.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setState(state.toProto());"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="        ResolvableFuture&lt;Resources> result = ResolvableFuture.create();"
+        errorLine2="                                                              ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        result.set("
+        errorLine2="                               ~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                Resources.fromProto(legacyResourcesRequestResult.get().toProto()));"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.fromProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                Resources.fromProto(legacyResourcesRequestResult.get().toProto()));"
+        errorLine2="                                          ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="                        result.setException(e);"
+        errorLine2="                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.hasRendererSchemaVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                                .hasRendererSchemaVersion()) {"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRendererSchemaVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                                    .setRendererSchemaVersion(DEFAULT_VERSION)"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="DeviceParameters.hasRendererSchemaVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                                .hasRendererSchemaVersion()) {"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setRendererSchemaVersion can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                                    .setRendererSchemaVersion(DEFAULT_VERSION)"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                    updateResources(callback, resources.toProto().toByteArray());"
+        errorLine2="                                                                        ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Resources.toProto can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                                                                .toProto()"
+        errorLine2="                                                                 ~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="        ResolvableFuture&lt;T> errorFuture = ResolvableFuture.create();"
+        errorLine2="                                                           ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.tiles`)"
+        errorLine1="        errorFuture.setException(throwable);"
+        errorLine2="                    ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TileService.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getStartMillis();"
+        errorLine2="                         ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.getEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getEndMillis();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimeInterval.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    TimelineProto.TimeInterval.newBuilder();"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setStartMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setStartMillis(startMillis);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setEndMillis can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setEndMillis(endMillis);"
+        errorLine2="                      ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasValidity()) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return TimeInterval.fromProto(mImpl.getValidity());"
+        errorLine2="                                                    ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.hasLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            if (mImpl.hasLayout()) {"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.getLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                return LayoutElementBuilders.Layout.fromProto(mImpl.getLayout());"
+        errorLine2="                                                                    ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="TimelineEntry.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    TimelineProto.TimelineEntry.newBuilder();"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValidity can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValidity(validity.toProto());"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setLayout can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setLayout(layout.toProto());"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.getTimelineEntriesList can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            for (TimelineProto.TimelineEntry item : mImpl.getTimelineEntriesList()) {"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Timeline.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                    TimelineProto.Timeline.newBuilder();"
+        errorLine2="                                           ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.addTimelineEntries can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.addTimelineEntries(timelineEntry.toProto());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TimelineBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Int32Prop.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final TypesProto.Int32Prop.Builder mImpl = TypesProto.Int32Prop.newBuilder();"
+        errorLine2="                                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-1809132005);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="StringProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final TypesProto.StringProp.Builder mImpl = TypesProto.StringProp.newBuilder();"
+        errorLine2="                                                                                      ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-319420356);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, value.hashCode());"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="FloatProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final TypesProto.FloatProp.Builder mImpl = TypesProto.FloatProp.newBuilder();"
+        errorLine2="                                                                                    ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(399943127);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Float.floatToIntBits(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.getValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            return mImpl.getValue();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="BoolProp.newBuilder can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final TypesProto.BoolProp.Builder mImpl = TypesProto.BoolProp.newBuilder();"
+        errorLine2="                                                                                  ~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="            private final Fingerprint mFingerprint = new Fingerprint(-278424864);"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Builder.setValue can only be called from within the same library group (referenced groupId=`` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mImpl.setValue(value);"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Fingerprint.recordPropertyUpdate can only be called from within the same library group (referenced groupId=`androidx.wear.protolayout` from groupId=`androidx.wear.tiles`)"
+        errorLine1="                mFingerprint.recordPropertyUpdate(1, Boolean.hashCode(value));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/tiles/TypeBuilders.java"/>
+    </issue>
+
 </issues>
diff --git a/wear/watchface/watchface-client-guava/api/current.ignore b/wear/watchface/watchface-client-guava/api/current.ignore
deleted file mode 100644
index 91dda93..0000000
--- a/wear/watchface/watchface-client-guava/api/current.ignore
+++ /dev/null
@@ -1,7 +0,0 @@
-// Baseline format: 1.0
-ChangedThrows: androidx.wear.watchface.client.ListenableWatchFaceControlClient#getOrCreateInteractiveWatchFaceClient(String, androidx.wear.watchface.client.DeviceConfig, androidx.wear.watchface.client.WatchUiState, androidx.wear.watchface.style.UserStyleData, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>, java.util.concurrent.Executor, androidx.core.util.Consumer<java.lang.String>, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>):
-    Method androidx.wear.watchface.client.ListenableWatchFaceControlClient.getOrCreateInteractiveWatchFaceClient no longer throws exception android.os.RemoteException
-
-
-ParameterNameChange: androidx.wear.watchface.client.ListenableWatchFaceControlClient#getOrCreateInteractiveWatchFaceClient(String, androidx.wear.watchface.client.DeviceConfig, androidx.wear.watchface.client.WatchUiState, androidx.wear.watchface.style.UserStyleData, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>, java.util.concurrent.Executor, androidx.core.util.Consumer<java.lang.String>, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) parameter #7:
-    Attempted to remove parameter name from parameter arg8 in androidx.wear.watchface.client.ListenableWatchFaceControlClient.getOrCreateInteractiveWatchFaceClient
diff --git a/wear/watchface/watchface-client-guava/api/restricted_current.ignore b/wear/watchface/watchface-client-guava/api/restricted_current.ignore
deleted file mode 100644
index 91dda93..0000000
--- a/wear/watchface/watchface-client-guava/api/restricted_current.ignore
+++ /dev/null
@@ -1,7 +0,0 @@
-// Baseline format: 1.0
-ChangedThrows: androidx.wear.watchface.client.ListenableWatchFaceControlClient#getOrCreateInteractiveWatchFaceClient(String, androidx.wear.watchface.client.DeviceConfig, androidx.wear.watchface.client.WatchUiState, androidx.wear.watchface.style.UserStyleData, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>, java.util.concurrent.Executor, androidx.core.util.Consumer<java.lang.String>, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>):
-    Method androidx.wear.watchface.client.ListenableWatchFaceControlClient.getOrCreateInteractiveWatchFaceClient no longer throws exception android.os.RemoteException
-
-
-ParameterNameChange: androidx.wear.watchface.client.ListenableWatchFaceControlClient#getOrCreateInteractiveWatchFaceClient(String, androidx.wear.watchface.client.DeviceConfig, androidx.wear.watchface.client.WatchUiState, androidx.wear.watchface.style.UserStyleData, java.util.Map<java.lang.Integer,? extends androidx.wear.watchface.complications.data.ComplicationData>, java.util.concurrent.Executor, androidx.core.util.Consumer<java.lang.String>, kotlin.coroutines.Continuation<? super androidx.wear.watchface.client.InteractiveWatchFaceClient>) parameter #7:
-    Attempted to remove parameter name from parameter arg8 in androidx.wear.watchface.client.ListenableWatchFaceControlClient.getOrCreateInteractiveWatchFaceClient
diff --git a/wear/watchface/watchface-client-guava/lint-baseline.xml b/wear/watchface/watchface-client-guava/lint-baseline.xml
new file mode 100644
index 0000000..fe1e9d36
--- /dev/null
+++ b/wear/watchface/watchface-client-guava/lint-baseline.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            val future = ResolvableFuture.create&lt;T>()"
+        errorLine2="                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AbstractResolvableFuture.addListener can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                future.addListener("
+        errorLine2="                       ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AbstractResolvableFuture.isCancelled can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                        if (future.isCancelled) {"
+        errorLine2="                                   ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="AbstractResolvableFuture.isCancelled can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                        if (future.isCancelled) {"
+        errorLine2="                                   ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    future.set(block())"
+        errorLine2="                           ~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    future.set(block())"
+        errorLine2="                               ~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    future.setException(e)"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt"/>
+    </issue>
+
+</issues>
diff --git a/wear/watchface/watchface-client/api/current.ignore b/wear/watchface/watchface-client/api/current.ignore
deleted file mode 100644
index 203d029..0000000
--- a/wear/watchface/watchface-client/api/current.ignore
+++ /dev/null
@@ -1,31 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.wear.watchface.client.WatchFaceMetadataClient#getUserStyleFlavors():
-    Added method androidx.wear.watchface.client.WatchFaceMetadataClient.getUserStyleFlavors()
-
-
-ChangedThrows: androidx.wear.watchface.client.HeadlessWatchFaceClient#getComplicationSlotsState():
-    Method androidx.wear.watchface.client.HeadlessWatchFaceClient.getComplicationSlotsState added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.HeadlessWatchFaceClient#getPreviewReferenceInstant():
-    Method androidx.wear.watchface.client.HeadlessWatchFaceClient.getPreviewReferenceInstant added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.HeadlessWatchFaceClient#getUserStyleSchema():
-    Method androidx.wear.watchface.client.HeadlessWatchFaceClient.getUserStyleSchema added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getComplicationSlotsState():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getComplicationSlotsState added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getContentDescriptionLabels():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getContentDescriptionLabels added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getInstanceId():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getInstanceId added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getOverlayStyle():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getOverlayStyle added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getPreviewReferenceInstant():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getPreviewReferenceInstant added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getUserStyleSchema():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getUserStyleSchema added thrown exception android.os.RemoteException
-
-
-RemovedClass: androidx.wear.watchface.client.DeviceConfigKt:
-    Removed class androidx.wear.watchface.client.DeviceConfigKt
-RemovedClass: androidx.wear.watchface.client.EditorStateKt:
-    Removed class androidx.wear.watchface.client.EditorStateKt
-RemovedClass: androidx.wear.watchface.client.WatchFaceExceptionKt:
-    Removed class androidx.wear.watchface.client.WatchFaceExceptionKt
diff --git a/wear/watchface/watchface-client/api/restricted_current.ignore b/wear/watchface/watchface-client/api/restricted_current.ignore
deleted file mode 100644
index 203d029..0000000
--- a/wear/watchface/watchface-client/api/restricted_current.ignore
+++ /dev/null
@@ -1,31 +0,0 @@
-// Baseline format: 1.0
-AddedAbstractMethod: androidx.wear.watchface.client.WatchFaceMetadataClient#getUserStyleFlavors():
-    Added method androidx.wear.watchface.client.WatchFaceMetadataClient.getUserStyleFlavors()
-
-
-ChangedThrows: androidx.wear.watchface.client.HeadlessWatchFaceClient#getComplicationSlotsState():
-    Method androidx.wear.watchface.client.HeadlessWatchFaceClient.getComplicationSlotsState added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.HeadlessWatchFaceClient#getPreviewReferenceInstant():
-    Method androidx.wear.watchface.client.HeadlessWatchFaceClient.getPreviewReferenceInstant added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.HeadlessWatchFaceClient#getUserStyleSchema():
-    Method androidx.wear.watchface.client.HeadlessWatchFaceClient.getUserStyleSchema added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getComplicationSlotsState():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getComplicationSlotsState added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getContentDescriptionLabels():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getContentDescriptionLabels added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getInstanceId():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getInstanceId added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getOverlayStyle():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getOverlayStyle added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getPreviewReferenceInstant():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getPreviewReferenceInstant added thrown exception android.os.RemoteException
-ChangedThrows: androidx.wear.watchface.client.InteractiveWatchFaceClient#getUserStyleSchema():
-    Method androidx.wear.watchface.client.InteractiveWatchFaceClient.getUserStyleSchema added thrown exception android.os.RemoteException
-
-
-RemovedClass: androidx.wear.watchface.client.DeviceConfigKt:
-    Removed class androidx.wear.watchface.client.DeviceConfigKt
-RemovedClass: androidx.wear.watchface.client.EditorStateKt:
-    Removed class androidx.wear.watchface.client.EditorStateKt
-RemovedClass: androidx.wear.watchface.client.WatchFaceExceptionKt:
-    Removed class androidx.wear.watchface.client.WatchFaceExceptionKt
diff --git a/wear/watchface/watchface-complications-data-source-ktx/src/main/java/androidx/wear/watchface/complications/datasource/SuspendingComplicationDataSourceService.kt b/wear/watchface/watchface-complications-data-source-ktx/src/main/java/androidx/wear/watchface/complications/datasource/SuspendingComplicationDataSourceService.kt
index 5395624..d462790 100644
--- a/wear/watchface/watchface-complications-data-source-ktx/src/main/java/androidx/wear/watchface/complications/datasource/SuspendingComplicationDataSourceService.kt
+++ b/wear/watchface/watchface-complications-data-source-ktx/src/main/java/androidx/wear/watchface/complications/datasource/SuspendingComplicationDataSourceService.kt
@@ -16,6 +16,7 @@
 
 package androidx.wear.watchface.complications.datasource
 
+import androidx.annotation.CallSuper
 import androidx.annotation.UiThread
 import androidx.wear.watchface.complications.data.ComplicationData
 import kotlinx.coroutines.CoroutineScope
@@ -49,7 +50,8 @@
     @UiThread
     abstract suspend fun onComplicationRequest(request: ComplicationRequest): ComplicationData?
 
-    override fun onDestroy() {
+    @CallSuper
+    open override fun onDestroy() {
         super.onDestroy()
         scope.cancel()
     }
diff --git a/wear/watchface/watchface-complications-data-source/api/current.ignore b/wear/watchface/watchface-complications-data-source/api/current.ignore
deleted file mode 100644
index bc01d17..0000000
--- a/wear/watchface/watchface-complications-data-source/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.complications.datasource.ComplicationDataTimelineKt:
-    Removed class androidx.wear.watchface.complications.datasource.ComplicationDataTimelineKt
diff --git a/wear/watchface/watchface-complications-data-source/api/restricted_current.ignore b/wear/watchface/watchface-complications-data-source/api/restricted_current.ignore
deleted file mode 100644
index bc01d17..0000000
--- a/wear/watchface/watchface-complications-data-source/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.complications.datasource.ComplicationDataTimelineKt:
-    Removed class androidx.wear.watchface.complications.datasource.ComplicationDataTimelineKt
diff --git a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
index 1790ab2..2f081c1 100644
--- a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
+++ b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
@@ -312,7 +312,6 @@
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     open fun createMainThreadHandler() = Handler(Looper.getMainLooper())
 
-    @SuppressLint("SyntheticAccessor")
     final override fun onBind(intent: Intent): IBinder? {
         if (ACTION_COMPLICATION_UPDATE_REQUEST == intent.action) {
             if (wrapper == null) {
@@ -452,13 +451,11 @@
     @MainThread public open fun onComplicationDeactivated(complicationInstanceId: Int) {}
 
     private inner class IComplicationProviderWrapper : IComplicationProvider.Stub() {
-        @SuppressLint("SyntheticAccessor")
         override fun onUpdate(complicationInstanceId: Int, type: Int, manager: IBinder): Unit =
             aidlMethod(TAG, "onUpdate") {
                 onUpdate2(complicationInstanceId, type, manager, bundle = null)
             }
 
-        @SuppressLint("SyntheticAccessor")
         override fun onUpdate2(
             complicationInstanceId: Int,
             type: Int,
@@ -588,7 +585,6 @@
                 }
             }
 
-        @SuppressLint("SyntheticAccessor")
         override fun onComplicationDeactivated(complicationInstanceId: Int): Unit =
             aidlMethod(TAG, "onComplicationDeactivated") {
                 mainThreadHandler.post {
@@ -598,7 +594,6 @@
                 }
             }
 
-        @SuppressLint("SyntheticAccessor")
         override fun onComplicationActivated(
             complicationInstanceId: Int,
             type: Int,
@@ -618,7 +613,6 @@
                 return API_VERSION
             }
 
-        @SuppressLint("SyntheticAccessor")
         override fun getComplicationPreviewData(type: Int): WireComplicationData? =
             aidlMethod(TAG, "getComplicationPreviewData") {
                 val expectedDataType = fromWireType(type)
diff --git a/wear/watchface/watchface-complications-data/api/current.ignore b/wear/watchface/watchface-complications-data/api/current.ignore
deleted file mode 100644
index aa5a43b..0000000
--- a/wear/watchface/watchface-complications-data/api/current.ignore
+++ /dev/null
@@ -1,29 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.wear.watchface.complications.data.LongTextComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.LongTextComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.LongTextComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder to BuilderT
-
-
-RemovedClass: androidx.wear.watchface.complications.data.DataKt:
-    Removed class androidx.wear.watchface.complications.data.DataKt
-RemovedClass: androidx.wear.watchface.complications.data.ImageKt:
-    Removed class androidx.wear.watchface.complications.data.ImageKt
-RemovedClass: androidx.wear.watchface.complications.data.TextKt:
-    Removed class androidx.wear.watchface.complications.data.TextKt
-RemovedClass: androidx.wear.watchface.complications.data.TypeKt:
-    Removed class androidx.wear.watchface.complications.data.TypeKt
-
-
-RemovedPackage: androidx.wear.watchface.utility:
-    Removed package androidx.wear.watchface.utility
diff --git a/wear/watchface/watchface-complications-data/api/restricted_current.ignore b/wear/watchface/watchface-complications-data/api/restricted_current.ignore
deleted file mode 100644
index 9bd0b8c..0000000
--- a/wear/watchface/watchface-complications-data/api/restricted_current.ignore
+++ /dev/null
@@ -1,39 +0,0 @@
-// Baseline format: 1.0
-ChangedType: androidx.wear.watchface.complications.data.LongTextComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.LongTextComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.LongTextComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.MonochromaticImageComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.NoPermissionComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.PhotoImageComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.RangedValueComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.ShortTextComplicationData.Builder to BuilderT
-ChangedType: androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder#setDataSource(android.content.ComponentName):
-    Method androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder.setDataSource has changed return type from androidx.wear.watchface.complications.data.SmallImageComplicationData.Builder to BuilderT
-
-
-RemovedClass: androidx.wear.watchface.complications.data.DataKt:
-    Removed class androidx.wear.watchface.complications.data.DataKt
-RemovedClass: androidx.wear.watchface.complications.data.DefaultComplicationDataSourcePolicyWireFormat:
-    Removed class androidx.wear.watchface.complications.data.DefaultComplicationDataSourcePolicyWireFormat
-RemovedClass: androidx.wear.watchface.complications.data.ImageKt:
-    Removed class androidx.wear.watchface.complications.data.ImageKt
-RemovedClass: androidx.wear.watchface.complications.data.TextKt:
-    Removed class androidx.wear.watchface.complications.data.TextKt
-RemovedClass: androidx.wear.watchface.complications.data.TypeKt:
-    Removed class androidx.wear.watchface.complications.data.TypeKt
-
-
-RemovedMethod: androidx.wear.watchface.complications.data.PlainComplicationText#getTimeDependentText():
-    Removed method androidx.wear.watchface.complications.data.PlainComplicationText.getTimeDependentText()
-RemovedMethod: androidx.wear.watchface.complications.data.TimeDifferenceComplicationText#getTimeDependentText():
-    Removed method androidx.wear.watchface.complications.data.TimeDifferenceComplicationText.getTimeDependentText()
-RemovedMethod: androidx.wear.watchface.complications.data.TimeFormatComplicationText#getTimeDependentText():
-    Removed method androidx.wear.watchface.complications.data.TimeFormatComplicationText.getTimeDependentText()
-
-
-RemovedPackage: androidx.wear.watchface.utility:
-    Removed package androidx.wear.watchface.utility
diff --git a/wear/watchface/watchface-complications-data/lint-baseline.xml b/wear/watchface/watchface-complications-data/lint-baseline.xml
index 5bd4b2e0..bce397f 100644
--- a/wear/watchface/watchface-complications-data/lint-baseline.xml
+++ b/wear/watchface/watchface-complications-data/lint-baseline.xml
@@ -21,7 +21,9 @@
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ComplicationData;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/android/support/wearable/complications/ComplicationData.aidl"/>
     </issue>
@@ -30,7 +32,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ComplicationProviderInfo;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/android/support/wearable/complications/ComplicationProviderInfo.aidl"/>
     </issue>
@@ -47,7 +49,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="    // IMPORTANT NOTE: All methods must be given an explicit transaction id that must never change"
+        errorLine1="interface IComplicationProvider {"
         errorLine2="^">
         <location
             file="src/main/aidl/android/support/wearable/complications/IComplicationProvider.aidl"/>
@@ -56,8 +58,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=""
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="oneway interface IPreviewComplicationDataCallback {"
+        errorLine2="^">
         <location
             file="src/main/aidl/android/support/wearable/complications/IPreviewComplicationDataCallback.aidl"/>
     </issue>
@@ -65,10 +67,28 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=" *"
+        errorLine1="interface IProviderInfoService {"
         errorLine2="^">
         <location
             file="src/main/aidl/android/support/wearable/complications/IProviderInfoService.aidl"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/complications/data/DefaultComplicationDataSourcePolicyWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/complications/data/DefaultComplicationDataSourcePolicyWireFormat.java"/>
+    </issue>
+
 </issues>
diff --git a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java
index 952d534..75c7eb1 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java
+++ b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationText.java
@@ -262,7 +262,6 @@
             new Parcelable.Creator<ComplicationText>() {
                 @Override
                 @NonNull
-                @SuppressLint("SyntheticAccessor")
                 public ComplicationText createFromParcel(@NonNull Parcel in) {
                     return new ComplicationText(in);
                 }
@@ -405,7 +404,6 @@
             }
         }
 
-        @SuppressLint("SyntheticAccessor")
         Object readResolve() {
             return new ComplicationText(mSurroundingText, mTimeDependentText, mDynamicText);
         }
@@ -772,7 +770,6 @@
 
         /** Returns {@link ComplicationText} representing the time difference as specified. */
         @NonNull
-        @SuppressLint("SyntheticAccessor")
         public ComplicationText build() {
             if (mReferencePeriodEndMillis < mReferencePeriodStartMillis) {
                 throw new IllegalStateException("Reference period end must not be before start.");
@@ -870,7 +867,6 @@
 
         /** Returns {@link ComplicationText} including the formatted time as specified. */
         @NonNull
-        @SuppressLint("SyntheticAccessor")
         public ComplicationText build() {
             return new ComplicationText(
                     mSurroundingText, new TimeFormatText(mFormat, mStyle, mTimeZone));
diff --git a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationTextTemplate.java b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationTextTemplate.java
index a24a9a50..d920085 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationTextTemplate.java
+++ b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationTextTemplate.java
@@ -58,7 +58,6 @@
             new Creator<ComplicationTextTemplate>() {
                 @Override
                 @NonNull
-                @SuppressLint("SyntheticAccessor")
                 public ComplicationTextTemplate createFromParcel(@NonNull Parcel in) {
                     return new ComplicationTextTemplate(in);
                 }
@@ -242,7 +241,6 @@
          * as specified.
          */
         @NonNull
-        @SuppressLint("SyntheticAccessor")
         public ComplicationTextTemplate build() {
             if (mTexts.isEmpty()) {
                 throw new IllegalStateException("At least one text must be specified.");
diff --git a/wear/watchface/watchface-complications-rendering/lint-baseline.xml b/wear/watchface/watchface-complications-rendering/lint-baseline.xml
new file mode 100644
index 0000000..aa857e4
--- /dev/null
+++ b/wear/watchface/watchface-complications-rendering/lint-baseline.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            if (!checkNotNull(mComplicationData.isColorRampInterpolated())) {"
+        errorLine2="                 ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Preconditions.checkNotNull can only be called from within the same library group prefix (referenced groupId=`androidx.core` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            if (!checkNotNull(mComplicationData.isColorRampInterpolated())) {"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java"/>
+    </issue>
+
+</issues>
diff --git a/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/CanvasComplicationDrawable.kt b/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/CanvasComplicationDrawable.kt
index c871758..96ea902 100644
--- a/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/CanvasComplicationDrawable.kt
+++ b/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/CanvasComplicationDrawable.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.watchface.complications.rendering
 
-import android.annotation.SuppressLint
 import android.content.res.Resources
 import android.graphics.Canvas
 import android.graphics.Rect
@@ -81,7 +80,6 @@
         object : Drawable.Callback {
             override fun unscheduleDrawable(who: Drawable, what: Runnable) {}
 
-            @SuppressLint("SyntheticAccessor")
             override fun invalidateDrawable(who: Drawable) {
                 invalidateCallback.onInvalidate()
             }
diff --git a/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java b/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java
index 6424328..1e188f9 100644
--- a/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java
+++ b/wear/watchface/watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java
@@ -22,7 +22,6 @@
 import static java.lang.Math.sin;
 import static java.lang.Math.toRadians;
 
-import android.annotation.SuppressLint;
 import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -1147,7 +1146,6 @@
                     mContext,
                     new OnDrawableLoadedListener() {
                         @Override
-                        @SuppressLint("SyntheticAccessor")
                         public void onDrawableLoaded(Drawable d) {
                             if (d == null) {
                                 return;
@@ -1166,7 +1164,6 @@
                     mContext,
                     new OnDrawableLoadedListener() {
                         @Override
-                        @SuppressLint("SyntheticAccessor")
                         public void onDrawableLoaded(Drawable d) {
                             if (d == null) {
                                 return;
@@ -1185,7 +1182,6 @@
                     mContext,
                     new OnDrawableLoadedListener() {
                         @Override
-                        @SuppressLint("SyntheticAccessor")
                         public void onDrawableLoaded(Drawable d) {
                             if (d == null) {
                                 return;
@@ -1204,7 +1200,6 @@
                     mContext,
                     new OnDrawableLoadedListener() {
                         @Override
-                        @SuppressLint("SyntheticAccessor")
                         public void onDrawableLoaded(Drawable d) {
                             if (d == null) {
                                 return;
@@ -1222,7 +1217,6 @@
                     mContext,
                     new OnDrawableLoadedListener() {
                         @Override
-                        @SuppressLint("SyntheticAccessor")
                         public void onDrawableLoaded(Drawable d) {
                             if (d == null) {
                                 return;
@@ -1326,7 +1320,6 @@
         /** Icon tint color filter */
         final ColorFilter mIconColorFilter;
 
-        @SuppressLint("SyntheticAccessor")
         PaintSet(
                 ComplicationStyle style,
                 boolean isAmbientStyle,
diff --git a/wear/watchface/watchface-complications/api/current.ignore b/wear/watchface/watchface-complications/api/current.ignore
deleted file mode 100644
index 5d6e1bd..0000000
--- a/wear/watchface/watchface-complications/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.complications.ComplicationDataSourceInfoRetrieverKt:
-    Removed class androidx.wear.watchface.complications.ComplicationDataSourceInfoRetrieverKt
diff --git a/wear/watchface/watchface-complications/api/restricted_current.ignore b/wear/watchface/watchface-complications/api/restricted_current.ignore
deleted file mode 100644
index b776ca1..0000000
--- a/wear/watchface/watchface-complications/api/restricted_current.ignore
+++ /dev/null
@@ -1,9 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.complications.ComplicationDataSourceInfoRetrieverKt:
-    Removed class androidx.wear.watchface.complications.ComplicationDataSourceInfoRetrieverKt
-
-
-RemovedMethod: androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy#DefaultComplicationDataSourcePolicy(androidx.wear.watchface.complications.data.DefaultComplicationDataSourcePolicyWireFormat):
-    Removed constructor androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy(androidx.wear.watchface.complications.data.DefaultComplicationDataSourcePolicyWireFormat)
-RemovedMethod: androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy#toWireFormat():
-    Removed method androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy.toWireFormat()
diff --git a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt
index b4b6119..23b825f 100644
--- a/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt
+++ b/wear/watchface/watchface-complications/src/main/java/androidx/wear/watchface/complications/ComplicationDataSourceInfoRetriever.kt
@@ -15,7 +15,6 @@
  */
 package androidx.wear.watchface.complications
 
-import android.annotation.SuppressLint
 import android.content.ComponentName
 import android.content.Context
 import android.content.Intent
@@ -81,25 +80,21 @@
     )
 
     private inner class ProviderInfoServiceConnection : ServiceConnection {
-        @SuppressLint("SyntheticAccessor")
         override fun onServiceConnected(name: ComponentName, service: IBinder) {
             deferredService.complete(IProviderInfoService.Stub.asInterface(service))
         }
 
-        @SuppressLint("SyntheticAccessor")
         override fun onBindingDied(name: ComponentName?) {
             synchronized(lock) { closed = true }
             deferredService.completeExceptionally(ServiceDisconnectedException())
         }
 
-        @SuppressLint("SyntheticAccessor")
         override fun onServiceDisconnected(name: ComponentName) {
             synchronized(lock) { closed = true }
             deferredService.completeExceptionally(ServiceDisconnectedException())
         }
     }
 
-    @SuppressLint("SyntheticAccessor")
     private val serviceConnection: ServiceConnection = ProviderInfoServiceConnection()
     private var context: Context? = null
     private val deferredService = CompletableDeferred<IProviderInfoService>()
diff --git a/wear/watchface/watchface-data/api/current.ignore b/wear/watchface/watchface-data/api/current.ignore
deleted file mode 100644
index fdfb917..0000000
--- a/wear/watchface/watchface-data/api/current.ignore
+++ /dev/null
@@ -1,27 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat:
-    Removed class androidx.wear.watchface.data.BoundingArcWireFormat from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#BoundingArcWireFormat(float, float, float):
-    Removed constructor androidx.wear.watchface.data.BoundingArcWireFormat(float,float,float) from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#BoundingArcWireFormat(float, float, float) parameter #0:
-    Removed parameter arg1 in androidx.wear.watchface.data.BoundingArcWireFormat(float arg1, float arg2, float arg3) from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#BoundingArcWireFormat(float, float, float) parameter #1:
-    Removed parameter arg2 in androidx.wear.watchface.data.BoundingArcWireFormat(float arg1, float arg2, float arg3) from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#BoundingArcWireFormat(float, float, float) parameter #2:
-    Removed parameter arg3 in androidx.wear.watchface.data.BoundingArcWireFormat(float arg1, float arg2, float arg3) from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#CREATOR:
-    Removed field androidx.wear.watchface.data.BoundingArcWireFormat.CREATOR from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#describeContents():
-    Removed method androidx.wear.watchface.data.BoundingArcWireFormat.describeContents() from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#getArcStartAngle():
-    Removed method androidx.wear.watchface.data.BoundingArcWireFormat.getArcStartAngle() from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#getArcThickness():
-    Removed method androidx.wear.watchface.data.BoundingArcWireFormat.getArcThickness() from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#getTotalArcAngle():
-    Removed method androidx.wear.watchface.data.BoundingArcWireFormat.getTotalArcAngle() from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#writeToParcel(android.os.Parcel, int):
-    Removed method androidx.wear.watchface.data.BoundingArcWireFormat.writeToParcel(android.os.Parcel,int) from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#writeToParcel(android.os.Parcel, int) parameter #0:
-    Removed parameter arg1 in androidx.wear.watchface.data.BoundingArcWireFormat.writeToParcel(android.os.Parcel arg1, int arg2) from compatibility checked API surface
-BecameUnchecked: androidx.wear.watchface.data.BoundingArcWireFormat#writeToParcel(android.os.Parcel, int) parameter #1:
-    Removed parameter arg2 in androidx.wear.watchface.data.BoundingArcWireFormat.writeToParcel(android.os.Parcel arg1, int arg2) from compatibility checked API surface
diff --git a/wear/watchface/watchface-data/api/restricted_current.ignore b/wear/watchface/watchface-data/api/restricted_current.ignore
deleted file mode 100644
index 36d7286..0000000
--- a/wear/watchface/watchface-data/api/restricted_current.ignore
+++ /dev/null
@@ -1,29 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.data.ComplicationSlotMetadataWireFormat:
-    Removed class androidx.wear.watchface.data.ComplicationSlotMetadataWireFormat
-RemovedClass: androidx.wear.watchface.data.ComplicationStateWireFormat:
-    Removed class androidx.wear.watchface.data.ComplicationStateWireFormat
-RemovedClass: androidx.wear.watchface.data.DeviceConfig:
-    Removed class androidx.wear.watchface.data.DeviceConfig
-RemovedClass: androidx.wear.watchface.data.IdAndComplicationDataWireFormat:
-    Removed class androidx.wear.watchface.data.IdAndComplicationDataWireFormat
-RemovedClass: androidx.wear.watchface.data.IdAndComplicationStateWireFormat:
-    Removed class androidx.wear.watchface.data.IdAndComplicationStateWireFormat
-RemovedClass: androidx.wear.watchface.data.IdAndTapEventWireFormat:
-    Removed class androidx.wear.watchface.data.IdAndTapEventWireFormat
-RemovedClass: androidx.wear.watchface.data.LayerParameterWireFormat:
-    Removed class androidx.wear.watchface.data.LayerParameterWireFormat
-RemovedClass: androidx.wear.watchface.data.RenderParametersWireFormat:
-    Removed class androidx.wear.watchface.data.RenderParametersWireFormat
-RemovedClass: androidx.wear.watchface.data.WatchFaceOverlayStyleWireFormat:
-    Removed class androidx.wear.watchface.data.WatchFaceOverlayStyleWireFormat
-RemovedClass: androidx.wear.watchface.data.WatchUiState:
-    Removed class androidx.wear.watchface.data.WatchUiState
-
-
-RemovedPackage: androidx.wear.watchface.control.data:
-    Removed package androidx.wear.watchface.control.data
-RemovedPackage: androidx.wear.watchface.editor.data:
-    Removed package androidx.wear.watchface.editor.data
-RemovedPackage: androidx.wear.watchface.style.data:
-    Removed package androidx.wear.watchface.style.data
diff --git a/wear/watchface/watchface-data/lint-baseline.xml b/wear/watchface/watchface-data/lint-baseline.xml
index 7f589a2..278d918 100644
--- a/wear/watchface/watchface-data/lint-baseline.xml
+++ b/wear/watchface/watchface-data/lint-baseline.xml
@@ -3,14 +3,18 @@
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ComplicationRenderParams;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/ComplicationRenderParams.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ComplicationSlotMetadataWireFormat;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/ComplicationSlotMetadataWireFormat.aidl"/>
     </issue>
@@ -19,14 +23,16 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ComplicationStateWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/ComplicationStateWireFormat.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable ContentDescriptionLabel;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/android/support/wearable/watchface/accessibility/ContentDescriptionLabel.aidl"/>
     </issue>
@@ -35,14 +41,16 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable CrashInfoParcel;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/CrashInfoParcel.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable DefaultProviderPoliciesParams;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/DefaultProviderPoliciesParams.aidl"/>
     </issue>
@@ -51,7 +59,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable EditorStateWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/editor/data/EditorStateWireFormat.aidl"/>
     </issue>
@@ -60,7 +68,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable GetComplicationSlotMetadataParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/GetComplicationSlotMetadataParams.aidl"/>
     </issue>
@@ -69,7 +77,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable GetUserStyleFlavorsParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/GetUserStyleFlavorsParams.aidl"/>
     </issue>
@@ -78,7 +86,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable GetUserStyleSchemaParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/GetUserStyleSchemaParams.aidl"/>
     </issue>
@@ -95,8 +103,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=""
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IEditorObserver {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/editor/IEditorObserver.aidl"/>
     </issue>
@@ -104,8 +112,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1=""
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IEditorService {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/editor/IEditorService.aidl"/>
     </issue>
@@ -113,8 +121,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.wear.watchface.control.data.WatchFaceRenderParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IHeadlessWatchFace {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/IHeadlessWatchFace.aidl"/>
     </issue>
@@ -122,8 +130,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.wear.watchface.control.IRemoteWatchFaceView;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IInteractiveWatchFace {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/IInteractiveWatchFace.aidl"/>
     </issue>
@@ -131,8 +139,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.wear.watchface.control.data.CrashInfoParcel;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IPendingInteractiveWatchFace {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/IPendingInteractiveWatchFace.aidl"/>
     </issue>
@@ -140,8 +148,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.wear.watchface.control.data.WatchFaceRenderParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IRemoteWatchFaceView {"
+        errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/IRemoteWatchFaceView.aidl"/>
     </issue>
@@ -149,7 +157,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import androidx.wear.watchface.control.data.HeadlessWatchFaceInstanceParams;"
+        errorLine1="interface IWatchFaceControlService {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/IWatchFaceControlService.aidl"/>
@@ -158,8 +166,8 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="import android.os.Bundle;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="interface IWatchFaceService {"
+        errorLine2="^">
         <location
             file="src/main/aidl/android/support/wearable/watchface/IWatchFaceService.aidl"/>
     </issue>
@@ -167,7 +175,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="    // IMPORTANT NOTE: All methods must be given an explicit transaction id that must never change"
+        errorLine1="interface IWatchfaceListener {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/IWatchfaceListener.aidl"/>
@@ -176,7 +184,7 @@
     <issue
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
-        errorLine1="    /**"
+        errorLine1="interface IWatchfaceReadyListener {"
         errorLine2="^">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/IWatchfaceReadyListener.aidl"/>
@@ -186,7 +194,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable IdAndComplicationDataWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/IdAndComplicationDataWireFormat.aidl"/>
     </issue>
@@ -195,7 +203,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable IdAndComplicationStateWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/IdAndComplicationStateWireFormat.aidl"/>
     </issue>
@@ -204,7 +212,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable IdTypeAndDefaultProviderPolicyWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/IdTypeAndDefaultProviderPolicyWireFormat.aidl"/>
     </issue>
@@ -213,7 +221,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ImmutableSystemState;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/ImmutableSystemState.aidl"/>
     </issue>
@@ -222,7 +230,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable ParcelableWrapper;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/android/support/wearable/watchface/ParcelableWrapper.aidl"/>
     </issue>
@@ -231,28 +239,34 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable RenderParametersWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/RenderParametersWireFormat.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable UserStyleFlavorsWireFormat;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/style/data/UserStyleFlavorsWireFormat.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable UserStyleSchemaWireFormat;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/style/data/UserStyleSchemaWireFormat.aidl"/>
     </issue>
 
     <issue
         id="RequireUnstableAidlAnnotation"
-        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker">
+        message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
+        errorLine1="parcelable UserStyleWireFormat;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/style/data/UserStyleWireFormat.aidl"/>
     </issue>
@@ -261,7 +275,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable WallpaperInteractiveWatchFaceInstanceParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/WallpaperInteractiveWatchFaceInstanceParams.aidl"/>
     </issue>
@@ -270,7 +284,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable WatchFaceColorsWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/WatchFaceColorsWireFormat.aidl"/>
     </issue>
@@ -279,7 +293,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable WatchFaceOverlayStyleWireFormat;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/WatchFaceOverlayStyleWireFormat.aidl"/>
     </issue>
@@ -288,7 +302,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable WatchFaceRenderParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/WatchFaceRenderParams.aidl"/>
     </issue>
@@ -297,7 +311,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable WatchFaceStyle;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/android/support/wearable/watchface/WatchFaceStyle.aidl"/>
     </issue>
@@ -306,7 +320,7 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable WatchFaceSurfaceRenderParams;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/control/data/WatchFaceSurfaceRenderParams.aidl"/>
     </issue>
@@ -315,9 +329,531 @@
         id="RequireUnstableAidlAnnotation"
         message="Unstable AIDL files must be annotated with `@RequiresOptIn` marker"
         errorLine1="parcelable WatchUiState;"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/aidl/androidx/wear/watchface/data/WatchUiState.aidl"/>
     </issue>
 
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/BoundingArcWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/BoundingArcWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/ComplicationOverlayWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/ComplicationOverlayWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/ComplicationRenderParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/ComplicationRenderParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/ComplicationSlotMetadataWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/ComplicationSlotMetadataWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/ComplicationStateWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/ComplicationStateWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/DefaultProviderPoliciesParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/DefaultProviderPoliciesParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/DeviceConfig.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/DeviceConfig.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/data/EditorStateWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/data/EditorStateWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/GetComplicationSlotMetadataParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/GetComplicationSlotMetadataParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/GetUserStyleFlavorsParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/GetUserStyleFlavorsParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/GetUserStyleSchemaParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/GetUserStyleSchemaParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/HeadlessWatchFaceInstanceParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/HeadlessWatchFaceInstanceParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/IdAndComplicationDataWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/IdAndComplicationDataWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/IdAndComplicationStateWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/IdAndComplicationStateWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/IdAndTapEventWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/IdAndTapEventWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/IdTypeAndDefaultProviderPolicyWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/IdTypeAndDefaultProviderPolicyWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/LayerParameterWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/LayerParameterWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/OptionWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/OptionWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/RenderParametersWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/RenderParametersWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorsWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleFlavorsWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleSchemaWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleSchemaWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleSettingWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleSettingWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/style/data/UserStyleWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/WallpaperInteractiveWatchFaceInstanceParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/WallpaperInteractiveWatchFaceInstanceParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/WatchFaceColorsWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/WatchFaceColorsWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/WatchFaceOverlayStyleWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/WatchFaceOverlayStyleWireFormat.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/WatchFaceRenderParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/control/data/WatchFaceRenderParams.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        parcel.writeParcelable(ParcelUtils.toParcelable(this), flags);"
+        errorLine2="                                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/WatchUiState.java"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromParcelable can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    return ParcelUtils.fromParcelable("
+        errorLine2="                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/data/WatchUiState.java"/>
+    </issue>
+
 </issues>
diff --git a/wear/watchface/watchface-editor-guava/lint-baseline.xml b/wear/watchface/watchface-editor-guava/lint-baseline.xml
new file mode 100644
index 0000000..ef35e65
--- /dev/null
+++ b/wear/watchface/watchface-editor-guava/lint-baseline.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            val result = ResolvableFuture.create&lt;ListenableEditorSession?>()"
+        errorLine2="                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            val result = ResolvableFuture.create&lt;ListenableEditorSession?>()"
+        errorLine2="                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    result.set("
+        errorLine2="                           ~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    result.set("
+        errorLine2="                           ~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                        ListenableEditorSession(EditorSession.createOnWatchEditorSession(activity))"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                        ListenableEditorSession(EditorSession.createOnWatchEditorSession(activity))"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    result.setException(e)"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    result.setException(e)"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.create can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="        val future = ResolvableFuture.create&lt;ChosenComplicationDataSource?>()"
+        errorLine2="                                      ~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                future.set("
+        errorLine2="                       ~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.set can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    wrappedEditorSession.openComplicationDataSourceChooser(complicationSlotId)"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ResolvableFuture.setException can only be called from within the same library group prefix (referenced groupId=`androidx.concurrent` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                future.setException(e)"
+        errorLine2="                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt"/>
+    </issue>
+
+</issues>
diff --git a/wear/watchface/watchface-editor/api/current.ignore b/wear/watchface/watchface-editor/api/current.ignore
deleted file mode 100644
index 5bed420..0000000
--- a/wear/watchface/watchface-editor/api/current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.editor.EditorSessionKt:
-    Removed class androidx.wear.watchface.editor.EditorSessionKt
-RemovedClass: androidx.wear.watchface.editor.WatchFaceEditorContractKt:
-    Removed class androidx.wear.watchface.editor.WatchFaceEditorContractKt
diff --git a/wear/watchface/watchface-editor/api/restricted_current.ignore b/wear/watchface/watchface-editor/api/restricted_current.ignore
deleted file mode 100644
index 5bed420..0000000
--- a/wear/watchface/watchface-editor/api/restricted_current.ignore
+++ /dev/null
@@ -1,5 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.editor.EditorSessionKt:
-    Removed class androidx.wear.watchface.editor.EditorSessionKt
-RemovedClass: androidx.wear.watchface.editor.WatchFaceEditorContractKt:
-    Removed class androidx.wear.watchface.editor.WatchFaceEditorContractKt
diff --git a/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/WatchFaceConfigActivity.kt b/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/WatchFaceConfigActivity.kt
index 6fa60828..8aaeb0b 100644
--- a/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/WatchFaceConfigActivity.kt
+++ b/wear/watchface/watchface-editor/samples/src/main/java/androidx/wear/watchface/editor/sample/WatchFaceConfigActivity.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.watchface.editor.sample
 
-import android.annotation.SuppressLint
 import android.view.View
 import android.view.accessibility.AccessibilityEvent
 import androidx.annotation.RestrictTo
@@ -81,7 +80,6 @@
             init(
                 editorSession,
                 object : FragmentController {
-                    @SuppressLint("SyntheticAccessor")
                     override fun showConfigFragment() {
                         showFragment(
                             ConfigFragment.newInstance(
@@ -94,12 +92,10 @@
                         )
                     }
 
-                    @SuppressLint("SyntheticAccessor")
                     override fun showComplicationConfigSelectionFragment() {
                         showFragment(ComplicationConfigFragment())
                     }
 
-                    @SuppressLint("SyntheticAccessor")
                     override fun showStyleConfigFragment(
                         settingId: String,
                         styleSchema: UserStyleSchema,
diff --git a/wear/watchface/watchface-guava/api/current.ignore b/wear/watchface/watchface-guava/api/current.ignore
deleted file mode 100644
index f4eee41..0000000
--- a/wear/watchface/watchface-guava/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.ListenableGlesRendererKt:
-    Removed class androidx.wear.watchface.ListenableGlesRendererKt
diff --git a/wear/watchface/watchface-guava/api/restricted_current.ignore b/wear/watchface/watchface-guava/api/restricted_current.ignore
deleted file mode 100644
index f4eee41..0000000
--- a/wear/watchface/watchface-guava/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.ListenableGlesRendererKt:
-    Removed class androidx.wear.watchface.ListenableGlesRendererKt
diff --git a/wear/watchface/watchface-style/api/current.ignore b/wear/watchface/watchface-style/api/current.ignore
deleted file mode 100644
index ac33402..0000000
--- a/wear/watchface/watchface-style/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.style.UserStyleSettingKt:
-    Removed class androidx.wear.watchface.style.UserStyleSettingKt
diff --git a/wear/watchface/watchface-style/api/restricted_current.ignore b/wear/watchface/watchface-style/api/restricted_current.ignore
deleted file mode 100644
index 76438c7..0000000
--- a/wear/watchface/watchface-style/api/restricted_current.ignore
+++ /dev/null
@@ -1,49 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.style.UserStyleSettingKt:
-    Removed class androidx.wear.watchface.style.UserStyleSettingKt
-
-
-RemovedMethod: androidx.wear.watchface.style.UserStyle#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyle.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleData#UserStyleData(androidx.wear.watchface.style.data.UserStyleWireFormat):
-    Removed constructor androidx.wear.watchface.style.UserStyleData(androidx.wear.watchface.style.data.UserStyleWireFormat)
-RemovedMethod: androidx.wear.watchface.style.UserStyleData#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleData.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSchema#UserStyleSchema(androidx.wear.watchface.style.data.UserStyleSchemaWireFormat):
-    Removed constructor androidx.wear.watchface.style.UserStyleSchema(androidx.wear.watchface.style.data.UserStyleSchemaWireFormat)
-RemovedMethod: androidx.wear.watchface.style.UserStyleSchema#getDefaultUserStyle():
-    Removed method androidx.wear.watchface.style.UserStyleSchema.getDefaultUserStyle()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSchema#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSchema.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting#getWireFormatOptionsList():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.getWireFormatOptionsList()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.BooleanUserStyleSetting#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.BooleanUserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.BooleanUserStyleSetting.BooleanOption#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.BooleanUserStyleSetting.BooleanOption.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.CustomValueUserStyleSetting#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.CustomValueUserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.CustomValueUserStyleSetting.CustomValueOption#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.CustomValueUserStyleSetting.CustomValueOption.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.DoubleRangeUserStyleSetting#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.DoubleRangeUserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.DoubleRangeUserStyleSetting.DoubleRangeOption#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.DoubleRangeUserStyleSetting.DoubleRangeOption.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.ListUserStyleSetting.ListOption.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.LongRangeUserStyleSetting#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.LongRangeUserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.LongRangeUserStyleSetting.LongRangeOption#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.LongRangeUserStyleSetting.LongRangeOption.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.Option#toWireFormat():
-    Removed method androidx.wear.watchface.style.UserStyleSetting.Option.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.Option.Companion#createFromWireFormat(androidx.wear.watchface.style.data.OptionWireFormat):
-    Removed method androidx.wear.watchface.style.UserStyleSetting.Option.Companion.createFromWireFormat(androidx.wear.watchface.style.data.OptionWireFormat)
diff --git a/wear/watchface/watchface/api/current.ignore b/wear/watchface/watchface/api/current.ignore
deleted file mode 100644
index 08cfb6e..0000000
--- a/wear/watchface/watchface/api/current.ignore
+++ /dev/null
@@ -1,11 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.ComplicationSlotsManagerKt:
-    Removed class androidx.wear.watchface.ComplicationSlotsManagerKt
-RemovedClass: androidx.wear.watchface.RenderBufferTextureKt:
-    Removed class androidx.wear.watchface.RenderBufferTextureKt
-RemovedClass: androidx.wear.watchface.RendererKt:
-    Removed class androidx.wear.watchface.RendererKt
-RemovedClass: androidx.wear.watchface.WatchFaceKt:
-    Removed class androidx.wear.watchface.WatchFaceKt
-RemovedClass: androidx.wear.watchface.WatchFaceServiceKt:
-    Removed class androidx.wear.watchface.WatchFaceServiceKt
diff --git a/wear/watchface/watchface/api/restricted_current.ignore b/wear/watchface/watchface/api/restricted_current.ignore
deleted file mode 100644
index 6abfc87..0000000
--- a/wear/watchface/watchface/api/restricted_current.ignore
+++ /dev/null
@@ -1,17 +0,0 @@
-// Baseline format: 1.0
-RemovedClass: androidx.wear.watchface.ComplicationSlotsManagerKt:
-    Removed class androidx.wear.watchface.ComplicationSlotsManagerKt
-RemovedClass: androidx.wear.watchface.RenderBufferTextureKt:
-    Removed class androidx.wear.watchface.RenderBufferTextureKt
-RemovedClass: androidx.wear.watchface.RendererKt:
-    Removed class androidx.wear.watchface.RendererKt
-RemovedClass: androidx.wear.watchface.WatchFaceKt:
-    Removed class androidx.wear.watchface.WatchFaceKt
-RemovedClass: androidx.wear.watchface.WatchFaceServiceKt:
-    Removed class androidx.wear.watchface.WatchFaceServiceKt
-
-
-RemovedMethod: androidx.wear.watchface.RenderParameters#RenderParameters(androidx.wear.watchface.data.RenderParametersWireFormat):
-    Removed constructor androidx.wear.watchface.RenderParameters(androidx.wear.watchface.data.RenderParametersWireFormat)
-RemovedMethod: androidx.wear.watchface.RenderParameters#toWireFormat():
-    Removed method androidx.wear.watchface.RenderParameters.toWireFormat()
diff --git a/wear/watchface/watchface/lint-baseline.xml b/wear/watchface/watchface/lint-baseline.xml
index 61f18b9..a5991f9 100644
--- a/wear/watchface/watchface/lint-baseline.xml
+++ b/wear/watchface/watchface/lint-baseline.xml
@@ -1,5 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.2.0-alpha14" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha14)" variant="all" version="8.2.0-alpha14">
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.fromInputStream can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="                    ParcelUtils.fromInputStream&lt;WallpaperInteractiveWatchFaceInstanceParams>(reader)"
+        errorLine2="                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/WatchFaceService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ParcelUtils.toOutputStream can only be called from within the same library group prefix (referenced groupId=`androidx.versionedparcelable` with prefix androidx from groupId=`androidx.wear.watchface`)"
+        errorLine1="            writer.use { ParcelUtils.toOutputStream(prefs, writer) }"
+        errorLine2="                                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/wear/watchface/WatchFaceService.kt"/>
+    </issue>
 
     <issue
         id="VisibleForTests"
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt
index 9df1d3b..eb1c09d 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/BroadcastsReceiver.kt
@@ -87,7 +87,6 @@
 
     internal val receiver: BroadcastReceiver =
         object : BroadcastReceiver() {
-            @SuppressWarnings("SyntheticAccessor")
             override fun onReceive(context: Context, intent: Intent) {
                 when (intent.action) {
                     Intent.ACTION_BATTERY_LOW -> observer.onActionBatteryLow()
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlotsManager.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlotsManager.kt
index a0b0e39..d9cdbd9 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlotsManager.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationSlotsManager.kt
@@ -437,7 +437,6 @@
      *
      * @param complicationSlotId The ID for the [ComplicationSlot] that was single tapped
      */
-    @SuppressWarnings("SyntheticAccessor")
     @UiThread
     internal fun onComplicationSlotSingleTapped(complicationSlotId: Int) {
         // Check if the complication is missing permissions.
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
index bab898a..352a41c 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.watchface
 
-import android.annotation.SuppressLint
 import android.content.res.Configuration
 import android.graphics.Bitmap
 import android.graphics.Canvas
@@ -1367,7 +1366,6 @@
 
                 surfaceHolder.addCallback(
                     object : SurfaceHolder.Callback {
-                        @SuppressLint("SyntheticAccessor")
                         override fun surfaceChanged(
                             holder: SurfaceHolder,
                             format: Int,
@@ -1377,7 +1375,6 @@
                             uiThreadCoroutineScope.launch { createWindowSurface(width, height) }
                         }
 
-                        @SuppressLint("SyntheticAccessor")
                         override fun surfaceDestroyed(holder: SurfaceHolder) {
                             if (this@GlesRenderer::eglSurface.isInitialized) {
                                 if (!EGL14.eglDestroySurface(eglDisplay, eglSurface)) {
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
index 5274c7c..3f77015 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
@@ -561,7 +561,6 @@
 }
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-@SuppressLint("SyntheticAccessor")
 public class WatchFaceImpl
 @UiThread
 constructor(
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index 476da70..d640a2c 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -1275,7 +1275,6 @@
 
         private val frameCallback =
             object : Choreographer.FrameCallback {
-                @SuppressWarnings("SyntheticAccessor")
                 override fun doFrame(frameTimeNs: Long) {
                     if (destroyed) {
                         return
@@ -2443,7 +2442,6 @@
                 complicationSlotsManager.init(
                     renderer,
                     object : ComplicationSlot.InvalidateListener {
-                        @SuppressWarnings("SyntheticAccessor")
                         override fun onInvalidate() {
                             // This could be called on any thread.
                             uiThreadHandler.runOnHandlerWithTracing("onInvalidate") {
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
index d4ef013..9381afd 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.watchface.control
 
-import android.annotation.SuppressLint
 import android.util.Log
 import androidx.annotation.UiThread
 import androidx.annotation.VisibleForTesting
@@ -65,7 +64,6 @@
                 instances.map { it.key }
             }
 
-        @SuppressLint("SyntheticAccessor")
         fun addInstance(impl: InteractiveWatchFaceImpl) {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
                 require(!instances.containsKey(impl.instanceId)) {
@@ -81,7 +79,6 @@
          * up params. Typically this can only happen if a WSL watchface is upgraded to an androidx
          * one, so WallpaperManager knows about it but WearServices/WSL does not.
          */
-        @SuppressLint("SyntheticAccessor")
         fun setParameterlessEngineOrTakePendingWallpaperInteractiveWatchFaceInstance(
             parameterlessEngine: WatchFaceService.EngineWrapper?
         ): PendingWallpaperInteractiveWatchFaceInstance? {
@@ -106,7 +103,6 @@
          * this can only happen if a WSL watchface is upgraded to an androidx one, so
          * WallpaperManager knows about it but WearServices/WSL does not.
          */
-        @SuppressLint("SyntheticAccessor")
         fun setParameterlessEngine(parameterlessEngine: WatchFaceService.EngineWrapper?) {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
                 require(this.parameterlessEngine == null || parameterlessEngine == null) {
@@ -116,14 +112,12 @@
             }
         }
 
-        @SuppressLint("SyntheticAccessor")
         fun getParameterlessEngine(): WatchFaceService.EngineWrapper? {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
                 return parameterlessEngine
             }
         }
 
-        @SuppressLint("SyntheticAccessor")
         fun getAndRetainInstance(instanceId: String): InteractiveWatchFaceImpl? {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
                 val refCountedInstance = instances[instanceId] ?: return null
@@ -132,7 +126,6 @@
             }
         }
 
-        @SuppressLint("SyntheticAccessor")
         fun releaseInstance(instanceId: String) {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
                 instances[instanceId]?.let {
@@ -144,7 +137,6 @@
             }
         }
 
-        @SuppressLint("SyntheticAccessor")
         fun deleteInstance(instanceId: String) {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
                 instances[instanceId]?.impl?.onDestroy()
@@ -152,7 +144,6 @@
             }
         }
 
-        @SuppressLint("SyntheticAccessor")
         fun renameInstance(oldInstanceId: String, newInstanceId: String) {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
                 val instance = instances.remove(oldInstanceId)
@@ -176,7 +167,6 @@
         }
 
         /** Can be called on any thread. */
-        @SuppressLint("SyntheticAccessor")
         fun getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance(
             value: PendingWallpaperInteractiveWatchFaceInstance
         ): IInteractiveWatchFace? {
@@ -223,7 +213,6 @@
         }
 
         /** Can be called on any thread. */
-        @SuppressLint("SyntheticAccessor")
         fun takePendingWallpaperInteractiveWatchFaceInstance():
             PendingWallpaperInteractiveWatchFaceInstance? {
             synchronized(pendingWallpaperInteractiveWatchFaceInstanceLock) {
diff --git a/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java b/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java
index 3793dd6..9d93cf3 100644
--- a/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java
+++ b/wear/wear-ongoing/src/main/java/androidx/wear/ongoing/OngoingActivity.java
@@ -309,7 +309,6 @@
          *
          * @throws IllegalArgumentException if the static icon or the touch intent are not provided.
          */
-        @SuppressWarnings("SyntheticAccessor")
         @NonNull
         public OngoingActivity build() {
             Notification notification = mNotificationBuilder.build();
diff --git a/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/authentication/RemoteAuthClient.kt b/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/authentication/RemoteAuthClient.kt
index 29ee6b7..8a95f2d 100644
--- a/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/authentication/RemoteAuthClient.kt
+++ b/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/authentication/RemoteAuthClient.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.phone.interactions.authentication
 
-import android.annotation.SuppressLint
 import android.content.ComponentName
 import android.content.Context
 import android.content.Intent
@@ -345,7 +344,6 @@
             onResult(OAuthResponse(errorCode, responseUrl))
         }
 
-        @SuppressLint("SyntheticAccessor")
         private fun onResult(response: OAuthResponse) {
             @ErrorCode val error = response.errorCode
             uiThreadExecutor.execute(
diff --git a/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/notifications/BridgingManager.kt b/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/notifications/BridgingManager.kt
index 4cb0ce7..76b4ad7 100644
--- a/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/notifications/BridgingManager.kt
+++ b/wear/wear-phone-interactions/src/main/java/androidx/wear/phone/interactions/notifications/BridgingManager.kt
@@ -16,7 +16,6 @@
 
 package androidx.wear.phone.interactions.notifications
 
-import android.annotation.SuppressLint
 import android.content.ComponentName
 import android.content.Context
 import android.content.Intent
@@ -86,7 +85,6 @@
      *
      * @throws RuntimeException if the service binding is failed.
      */
-    @SuppressLint("SyntheticAccessor")
     public fun setConfig(bridgingConfig: BridgingConfig) {
         require(isWearableDevice(context)) { "API only supported on wearable devices" }
         val connection = BridgingConfigServiceConnection(context, bridgingConfig)
diff --git a/wear/wear-tooling-preview/src/main/java/androidx/wear/tooling/preview/devices/WearDevice.kt b/wear/wear-tooling-preview/src/main/java/androidx/wear/tooling/preview/devices/WearDevice.kt
index 8d77838..3916557 100644
--- a/wear/wear-tooling-preview/src/main/java/androidx/wear/tooling/preview/devices/WearDevice.kt
+++ b/wear/wear-tooling-preview/src/main/java/androidx/wear/tooling/preview/devices/WearDevice.kt
@@ -24,13 +24,17 @@
  */
 object WearDevices {
     // Make sure to update any @StringDefs that reference this object.
-    /** Round device with 454px x 454px dimensions, 1.39" size and xhdpi density. */
+    /** Round device with 227x227dp (454x454px) dimensions, 1.39" size and xhdpi density. */
     const val LARGE_ROUND = "id:wearos_large_round"
-    /** Round device with 384px x 384px dimensions, 1.2" size and xhdpi density. */
+    /** Round device with 192x192dp (384x384px) dimensions, 1.2" size and xhdpi density. */
     const val SMALL_ROUND = "id:wearos_small_round"
-    /** Square device with 360px x 360px dimensions, 1.2" size and xhdpi density. */
+    /** Square device with 180x180dp (360x360px) dimensions, 1.2" size and xhdpi density. If
+     * you are targeting Wear 3 or later, it is recommended to use [LARGE_ROUND] or [SMALL_ROUND]
+     * instead. */
     const val SQUARE = "id:wearos_square"
-    /** Rectangular device with 402px x 476px dimensions, 1.2" size and xhdpi density. */
+    /** Rectangular device with 201x238dp (402x476px) dimensions, 1.2" size and xhdpi density. If
+     * you are targeting Wear 3 or later, it is recommended to use [LARGE_ROUND] or [SMALL_ROUND]
+     * instead. */
     const val RECT = "id:wearos_rect"
 }
 
diff --git a/wear/wear/src/main/java/androidx/wear/widget/ArcLayout.java b/wear/wear/src/main/java/androidx/wear/widget/ArcLayout.java
index 77107d3..9cb9311 100644
--- a/wear/wear/src/main/java/androidx/wear/widget/ArcLayout.java
+++ b/wear/wear/src/main/java/androidx/wear/widget/ArcLayout.java
@@ -306,7 +306,6 @@
 
     private boolean mClockwise;
 
-    @SuppressWarnings("SyntheticAccessor")
     private final ChildArcAngles mChildArcAngles = new ChildArcAngles();
 
     public ArcLayout(@NonNull Context context) {
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java
index f0b21a0..2c3fca5 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java
@@ -116,28 +116,6 @@
                 WebSettingsCompat.getDisabledActionModeMenuItems(mWebViewOnUiThread.getSettings()));
     }
 
-    /**
-     * This should remain functionally equivalent to
-     * android.webkit.cts.WebSettingsTest#testSuppressedErrorPage. Modifications to this test should
-     * be reflected in that test as necessary. See http://go/modifying-webview-cts.
-     */
-    @Test
-    @SuppressWarnings("deprecation")
-    public void testSuppressedErrorPage() throws Throwable {
-        WebkitUtils.checkFeature(WebViewFeature.SUPPRESS_ERROR_PAGE);
-
-        // default value should be false
-        assertFalse(WebSettingsCompat.willSuppressErrorPage(mWebViewOnUiThread.getSettings()));
-
-        WebSettingsCompat.setWillSuppressErrorPage(mWebViewOnUiThread.getSettings(), true);
-        assertTrue(WebSettingsCompat.willSuppressErrorPage(mWebViewOnUiThread.getSettings()));
-
-        // We could test that suppression actually happens, similar to #testWillSuppressErrorPage in
-        // org.chromium.android_webview.test.AwSettingsTest using only public WebView APIs.
-        // However, at the time of writing, that test is potentially flaky (waits 1000ms after a
-        // bad navigation and then checks).
-    }
-
     @Test
     public void testEnterpriseAuthenticationAppLinkPolicyEnabled() throws Throwable {
         WebkitUtils.checkFeature(WebViewFeature.ENTERPRISE_AUTHENTICATION_APP_LINK_POLICY);
diff --git a/webkit/integration-tests/testapp/lint-baseline.xml b/webkit/integration-tests/testapp/lint-baseline.xml
new file mode 100644
index 0000000..7d54279
--- /dev/null
+++ b/webkit/integration-tests/testapp/lint-baseline.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="WebViewFeature.REQUESTED_WITH_HEADER_ALLOW_LIST can only be accessed from within the same library group (referenced groupId=`androidx.webkit` from groupId=`androidx.webkit.integration-tests`)"
+        errorLine1="        if (!WebViewFeature.isFeatureSupported(WebViewFeature.REQUESTED_WITH_HEADER_ALLOW_LIST)) {"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/com/example/androidx/webkit/RequestedWithHeaderActivity.java"/>
+    </issue>
+
+</issues>
diff --git a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/RendererTerminationActivity.java b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/RendererTerminationActivity.java
index c59a22a..4abcc8a 100644
--- a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/RendererTerminationActivity.java
+++ b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/RendererTerminationActivity.java
@@ -223,7 +223,6 @@
         layout.addView(mWebView);
 
         mWebView.setWebViewClient(new WebViewClient() {
-            @SuppressLint("SyntheticAccessor")
             @Override
             public boolean onRenderProcessGone(WebView view, RenderProcessGoneDetail detail) {
                 mWebView.destroy();
@@ -249,7 +248,6 @@
         if (WebViewFeature.isFeatureSupported(
                 WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE)) {
             WebViewCompat.setWebViewRenderProcessClient(mWebView, new WebViewRenderProcessClient() {
-                @SuppressLint("SyntheticAccessor")
                 @Override
                 public void onRenderProcessUnresponsive(
                         @NonNull WebView view, @Nullable WebViewRenderProcess renderer) {
@@ -261,7 +259,6 @@
                         dialog.show(getSupportFragmentManager(), "dialog-unresponsive");
                     }
                 }
-                @SuppressLint("SyntheticAccessor")
                 @Override
                 public void onRenderProcessResponsive(@NonNull WebView view,
                         @Nullable WebViewRenderProcess renderer) {
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java b/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
index 5c25673f..f50fb6a 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebSettingsCompat.java
@@ -220,60 +220,6 @@
     }
 
     /**
-     * Sets whether the WebView’s internal error page should be suppressed or displayed
-     * for bad navigations. True means suppressed (not shown), false means it will be
-     * displayed.
-     * The default value is false.
-     *
-     * <p>
-     * This method should only be called if
-     * {@link WebViewFeature#isFeatureSupported(String)}
-     * returns true for {@link WebViewFeature#SUPPRESS_ERROR_PAGE}.
-     *
-     * @param suppressed whether the WebView should suppress its internal error page
-     * @deprecated unreleased API will be removed in 1.9.0
-     */
-    @Deprecated
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
-    @RequiresFeature(name = WebViewFeature.SUPPRESS_ERROR_PAGE,
-            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
-    public static void setWillSuppressErrorPage(@NonNull WebSettings settings,
-            boolean suppressed) {
-        ApiFeature.NoFramework feature = WebViewFeatureInternal.SUPPRESS_ERROR_PAGE;
-        if (feature.isSupportedByWebView()) {
-            getAdapter(settings).setWillSuppressErrorPage(suppressed);
-        } else {
-            throw WebViewFeatureInternal.getUnsupportedOperationException();
-        }
-    }
-
-
-    /**
-     * Gets whether the WebView’s internal error page will be suppressed or displayed
-     *
-     * <p>
-     * This method should only be called if
-     * {@link WebViewFeature#isFeatureSupported(String)}
-     * returns true for {@link WebViewFeature#SUPPRESS_ERROR_PAGE}.
-     *
-     * @return true if the WebView will suppress its internal error page
-     * @see #setWillSuppressErrorPage
-     * @deprecated unreleased API will be removed in 1.9.0
-     */
-    @Deprecated
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
-    @RequiresFeature(name = WebViewFeature.SUPPRESS_ERROR_PAGE,
-            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
-    public static boolean willSuppressErrorPage(@NonNull WebSettings settings) {
-        ApiFeature.NoFramework feature = WebViewFeatureInternal.SUPPRESS_ERROR_PAGE;
-        if (feature.isSupportedByWebView()) {
-            return getAdapter(settings).willSuppressErrorPage();
-        } else {
-            throw WebViewFeatureInternal.getUnsupportedOperationException();
-        }
-    }
-
-    /**
      * Disable force dark, irrespective of the force dark mode of the WebView parent. In this mode,
      * WebView content will always be rendered as-is, regardless of whether native views are being
      * automatically darkened.
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
index df43989..2a982dc 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
@@ -91,7 +91,6 @@
             WEB_VIEW_RENDERER_TERMINATE,
             WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE,
             PROXY_OVERRIDE,
-            SUPPRESS_ERROR_PAGE,
             MULTI_PROCESS,
             FORCE_DARK,
             FORCE_DARK_STRATEGY,
@@ -433,17 +432,6 @@
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
-     * This feature covers
-     * {@link WebSettingsCompat#willSuppressErrorPage(WebSettings)} and
-     * {@link WebSettingsCompat#setWillSuppressErrorPage(WebSettings, boolean)}.
-     *
-     * TODO(cricke): unhide
-     */
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public static final String SUPPRESS_ERROR_PAGE = "SUPPRESS_ERROR_PAGE";
-
-    /**
-     * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers {@link WebViewCompat#isMultiProcessEnabled()}
      */
     public static final String MULTI_PROCESS = "MULTI_PROCESS";
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
index f04a71d..041647d 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
@@ -79,20 +79,6 @@
     }
 
     /**
-     * Adapter method for {@link androidx.webkit.WebSettingsCompat#setWillSuppressErrorPage}.
-     */
-    public void setWillSuppressErrorPage(boolean suppressed) {
-        mBoundaryInterface.setWillSuppressErrorPage(suppressed);
-    }
-
-    /**
-     * Adapter method for {@link androidx.webkit.WebSettingsCompat#willSuppressErrorPage}.
-     */
-    public boolean willSuppressErrorPage() {
-        return mBoundaryInterface.getWillSuppressErrorPage();
-    }
-
-    /**
      * Adapter method for {@link androidx.webkit.WebSettingsCompat#setForceDark}.
      */
     public void setForceDark(int forceDarkMode) {
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
index 59627a9..668dac6 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
@@ -443,14 +443,6 @@
     public static final ApiFeature.NoFramework PROXY_OVERRIDE = new ApiFeature.NoFramework(
             WebViewFeature.PROXY_OVERRIDE, Features.PROXY_OVERRIDE);
 
-    /**
-     * This feature covers
-     * {@link androidx.webkit.WebSettingsCompat#willSuppressErrorPage(WebSettings)} and
-     * {@link androidx.webkit.WebSettingsCompat#setWillSuppressErrorPage(WebSettings, boolean)}.
-     */
-    public static final ApiFeature.NoFramework SUPPRESS_ERROR_PAGE =
-            new ApiFeature.NoFramework(WebViewFeature.SUPPRESS_ERROR_PAGE,
-                    Features.SUPPRESS_ERROR_PAGE);
 
     /**
      * This feature covers {@link WebViewCompat#isMultiProcessEnabled()}.
diff --git a/window/window-java/api/current.ignore b/window/window-java/api/current.ignore
deleted file mode 100644
index 2fe1c1b..0000000
--- a/window/window-java/api/current.ignore
+++ /dev/null
@@ -1,19 +0,0 @@
-// Baseline format: 1.0
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter:
-    Removed class androidx.window.java.embedding.SplitControllerCallbackAdapter from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#SplitControllerCallbackAdapter(androidx.window.embedding.SplitController):
-    Removed constructor androidx.window.java.embedding.SplitControllerCallbackAdapter(androidx.window.embedding.SplitController) from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#SplitControllerCallbackAdapter(androidx.window.embedding.SplitController) parameter #0:
-    Removed parameter controller in androidx.window.java.embedding.SplitControllerCallbackAdapter(androidx.window.embedding.SplitController controller) from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#addSplitListener(android.app.Activity, java.util.concurrent.Executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>):
-    Removed method androidx.window.java.embedding.SplitControllerCallbackAdapter.addSplitListener(android.app.Activity,java.util.concurrent.Executor,androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>) from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#addSplitListener(android.app.Activity, java.util.concurrent.Executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>) parameter #0:
-    Removed parameter activity in androidx.window.java.embedding.SplitControllerCallbackAdapter.addSplitListener(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer) from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#addSplitListener(android.app.Activity, java.util.concurrent.Executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>) parameter #1:
-    Removed parameter executor in androidx.window.java.embedding.SplitControllerCallbackAdapter.addSplitListener(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer) from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#addSplitListener(android.app.Activity, java.util.concurrent.Executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>) parameter #2:
-    Removed parameter consumer in androidx.window.java.embedding.SplitControllerCallbackAdapter.addSplitListener(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer) from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#removeSplitListener(androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>):
-    Removed method androidx.window.java.embedding.SplitControllerCallbackAdapter.removeSplitListener(androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>) from compatibility checked API surface
-BecameUnchecked: androidx.window.java.embedding.SplitControllerCallbackAdapter#removeSplitListener(androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>>) parameter #0:
-    Removed parameter consumer in androidx.window.java.embedding.SplitControllerCallbackAdapter.removeSplitListener(androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer) from compatibility checked API surface
diff --git a/window/window/lint-baseline.xml b/window/window/lint-baseline.xml
new file mode 100644
index 0000000..f3ed016
--- /dev/null
+++ b/window/window/lint-baseline.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0-alpha15" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0-alpha15)" variant="all" version="8.2.0-alpha15">
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_3 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="    return ExtensionsUtil.safeVendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_3"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/ActivityEmbeddingOptions.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_1 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="            WindowExtensions.VENDOR_API_LEVEL_1 -> api1Impl.translateCompat(splitInfo)"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="            WindowExtensions.VENDOR_API_LEVEL_2 -> api2Impl.translateCompat(splitInfo)"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ActivityStack.getToken can only be called from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="                        primaryActivityStack.token,"
+        errorLine2="                                             ~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ActivityStack.getToken can only be called from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="                        primaryActivityStack.token,"
+        errorLine2="                                             ~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ActivityStack.getToken can only be called from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="                        secondaryActivityStack.token,"
+        errorLine2="                                               ~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ActivityStack.getToken can only be called from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="                        secondaryActivityStack.token,"
+        errorLine2="                                               ~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        if (vendorApiLevel &lt; WindowExtensions.VENDOR_API_LEVEL_2) {"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        require(vendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2)"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        require(vendorApiLevel >= WindowExtensions.VENDOR_API_LEVEL_2)"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        if (vendorApiLevel &lt; WindowExtensions.VENDOR_API_LEVEL_2) {"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        if (vendorApiLevel &lt; WindowExtensions.VENDOR_API_LEVEL_2) {"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingAdapter.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        if (ExtensionsUtil.safeVendorApiLevel &lt; VENDOR_API_LEVEL_2) {"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingCompat.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_2 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        ExtensionsUtil.safeVendorApiLevel >= VENDOR_API_LEVEL_2"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingCompat.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_3 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        ExtensionsUtil.safeVendorApiLevel >= VENDOR_API_LEVEL_3"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingCompat.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="WindowExtensions.VENDOR_API_LEVEL_3 can only be accessed from within the same library group (referenced groupId=`androidx.window.extensions` from groupId=`androidx.window`)"
+        errorLine1="        ExtensionsUtil.safeVendorApiLevel >= VENDOR_API_LEVEL_3"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/window/embedding/EmbeddingCompat.kt"/>
+    </issue>
+
+</issues>
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarCompat.kt b/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarCompat.kt
index d3f5aab..1e7dec9 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarCompat.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarCompat.kt
@@ -330,7 +330,6 @@
      * If you change the name of this class, you must update the proguard file.
      */
     internal inner class TranslatingCallback : SidecarCallback {
-        @SuppressLint("SyntheticAccessor")
         override fun onDeviceStateChanged(newDeviceState: SidecarDeviceState) {
             windowListenerRegisteredContexts.values.forEach { activity ->
                 val layoutInfo = getActivityWindowToken(activity)
@@ -342,7 +341,6 @@
             }
         }
 
-        @SuppressLint("SyntheticAccessor")
         override fun onWindowLayoutChanged(
             windowToken: IBinder,
             newLayout: SidecarWindowLayoutInfo
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt b/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt
index 57da910..d3ba19b1 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt
@@ -15,7 +15,6 @@
  */
 package androidx.window.layout.adapter.sidecar
 
-import android.annotation.SuppressLint
 import android.app.Activity
 import android.content.Context
 import android.util.Log
@@ -145,7 +144,6 @@
 
     @VisibleForTesting
     internal inner class ExtensionListenerImpl : ExtensionCallbackInterface {
-        @SuppressLint("SyntheticAccessor")
         override fun onWindowLayoutChanged(
             activity: Activity,
             newLayout: WindowLayoutInfo
diff --git a/work/buildSrc b/work/buildSrc
deleted file mode 120000
index 053a423..0000000
--- a/work/buildSrc
+++ /dev/null
@@ -1 +0,0 @@
-../buildSrc
\ No newline at end of file
diff --git a/work/integration-tests/testapp/lint-baseline.xml b/work/integration-tests/testapp/lint-baseline.xml
index c033d44..ef96855 100644
--- a/work/integration-tests/testapp/lint-baseline.xml
+++ b/work/integration-tests/testapp/lint-baseline.xml
@@ -47,6 +47,114 @@
     </issue>
 
     <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                          ~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="Api16Impl.cancel can only be called from within the same library group (referenced groupId=`androidx.sqlite` from groupId=`androidx.room`)"
+        errorLine1="                            SupportSQLiteCompat.Api16Impl.cancel(cancellationSignal)"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/CoroutinesRoom.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="        remoteWorkManager.enqueue(listOf(request)).await()"
+        errorLine2="                                                   ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="        ).await()"
+        errorLine2="          ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="        ).await()"
+        errorLine2="          ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="            .await()"
+        errorLine2="             ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="        remoteWorkManager.cancelAllWorkByTag(WORK_TAG).await()"
+        errorLine2="                                                       ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="        remoteWorkManager.cancelAllWork().await()"
+        errorLine2="                                          ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="        val workInfoList: List&lt;WorkInfo> = remoteWorkManager.getWorkInfos(query).await()"
+        errorLine2="                                                                                 ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteService.kt"/>
+    </issue>
+
+    <issue
+        id="RestrictedApi"
+        message="ListenableFutureKt.await can only be called from within the same library group (referenced groupId=`androidx.work` from groupId=`androidx.work.integration-tests`)"
+        errorLine1="                    setProgressAsync(progress).await()"
+        errorLine2="                                               ~~~~~">
+        <location
+            file="src/main/java/androidx/work/integration/testapp/RemoteWorker.kt"/>
+    </issue>
+
+    <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://developer.android.com/kotlin/interop#nullability_annotations"
         errorLine1="    protected void onCreate(final Bundle savedInstanceState) {"
diff --git a/work/settings.gradle b/work/settings.gradle
index c0eac2e..5fad296 100644
--- a/work/settings.gradle
+++ b/work/settings.gradle
@@ -16,7 +16,7 @@
 
 // see ../playground-common/README.md for details on how this works
 pluginManagement {
-    includeBuild "../playground-common/playground-plugin"
+    apply from: "../playground-common/configure-plugin-management.gradle", to: it
 }
 plugins {
     id "playground"
diff --git a/work/work-runtime/api/current.txt b/work/work-runtime/api/current.txt
index 3d1b1dc..4c1e9d7 100644
--- a/work/work-runtime/api/current.txt
+++ b/work/work-runtime/api/current.txt
@@ -403,8 +403,23 @@
     property @RequiresApi(31) public final int stopReason;
     property public final java.util.Set<java.lang.String> tags;
     field public static final androidx.work.WorkInfo.Companion Companion;
+    field public static final int STOP_REASON_APP_STANDBY = 12; // 0xc
+    field public static final int STOP_REASON_BACKGROUND_RESTRICTION = 11; // 0xb
+    field public static final int STOP_REASON_CANCELLED_BY_APP = 1; // 0x1
+    field public static final int STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW = 5; // 0x5
+    field public static final int STOP_REASON_CONSTRAINT_CHARGING = 6; // 0x6
+    field public static final int STOP_REASON_CONSTRAINT_CONNECTIVITY = 7; // 0x7
+    field public static final int STOP_REASON_CONSTRAINT_DEVICE_IDLE = 8; // 0x8
+    field public static final int STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW = 9; // 0x9
+    field public static final int STOP_REASON_DEVICE_STATE = 4; // 0x4
+    field public static final int STOP_REASON_ESTIMATED_APP_LAUNCH_TIME_CHANGED = 15; // 0xf
     field public static final int STOP_REASON_NOT_STOPPED = -256; // 0xffffff00
+    field public static final int STOP_REASON_PREEMPT = 2; // 0x2
+    field public static final int STOP_REASON_QUOTA = 10; // 0xa
+    field public static final int STOP_REASON_SYSTEM_PROCESSING = 14; // 0xe
+    field public static final int STOP_REASON_TIMEOUT = 3; // 0x3
     field public static final int STOP_REASON_UNKNOWN = -512; // 0xfffffe00
+    field public static final int STOP_REASON_USER = 13; // 0xd
   }
 
   public static final class WorkInfo.Companion {
diff --git a/work/work-runtime/api/restricted_current.txt b/work/work-runtime/api/restricted_current.txt
index 3d1b1dc..4c1e9d7 100644
--- a/work/work-runtime/api/restricted_current.txt
+++ b/work/work-runtime/api/restricted_current.txt
@@ -403,8 +403,23 @@
     property @RequiresApi(31) public final int stopReason;
     property public final java.util.Set<java.lang.String> tags;
     field public static final androidx.work.WorkInfo.Companion Companion;
+    field public static final int STOP_REASON_APP_STANDBY = 12; // 0xc
+    field public static final int STOP_REASON_BACKGROUND_RESTRICTION = 11; // 0xb
+    field public static final int STOP_REASON_CANCELLED_BY_APP = 1; // 0x1
+    field public static final int STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW = 5; // 0x5
+    field public static final int STOP_REASON_CONSTRAINT_CHARGING = 6; // 0x6
+    field public static final int STOP_REASON_CONSTRAINT_CONNECTIVITY = 7; // 0x7
+    field public static final int STOP_REASON_CONSTRAINT_DEVICE_IDLE = 8; // 0x8
+    field public static final int STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW = 9; // 0x9
+    field public static final int STOP_REASON_DEVICE_STATE = 4; // 0x4
+    field public static final int STOP_REASON_ESTIMATED_APP_LAUNCH_TIME_CHANGED = 15; // 0xf
     field public static final int STOP_REASON_NOT_STOPPED = -256; // 0xffffff00
+    field public static final int STOP_REASON_PREEMPT = 2; // 0x2
+    field public static final int STOP_REASON_QUOTA = 10; // 0xa
+    field public static final int STOP_REASON_SYSTEM_PROCESSING = 14; // 0xe
+    field public static final int STOP_REASON_TIMEOUT = 3; // 0x3
     field public static final int STOP_REASON_UNKNOWN = -512; // 0xfffffe00
+    field public static final int STOP_REASON_USER = 13; // 0xd
   }
 
   public static final class WorkInfo.Companion {
diff --git a/work/work-runtime/build.gradle b/work/work-runtime/build.gradle
index 70c05ae..13e0508 100644
--- a/work/work-runtime/build.gradle
+++ b/work/work-runtime/build.gradle
@@ -53,11 +53,6 @@
         androidTest.assets.srcDirs += files("$projectDir/src/schemas".toString())
     }
     namespace "androidx.work"
-    lintOptions {
-        // Too many Kotlin features require synthetic accessors - we want to rely on R8 to
-        // remove these accessors
-        disable("SyntheticAccessor")
-    }
 }
 
 dependencies {
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
index fc6fc8f..a9209c7 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
@@ -1102,50 +1102,18 @@
                 containsInAnyOrder(runtimeExtras.triggeredContentUris.toArray()));
     }
 
-    @Test
-    @SmallTest
-    public void testInterruptionWithoutCancellation_isMarkedOnRunningWorker() {
-        OneTimeWorkRequest work =
-                new OneTimeWorkRequest.Builder(InterruptionAwareWorker.class).build();
-        insertWork(work);
-
-        ListenableWorker worker = mConfiguration.getWorkerFactory().createWorkerWithDefaultFallback(
-                mContext.getApplicationContext(),
-                InterruptionAwareWorker.class.getName(),
-                new WorkerParameters(
-                        work.getId(),
-                        Data.EMPTY,
-                        work.getTags(),
-                        new WorkerParameters.RuntimeExtras(),
-                        1,
-                        0,
-                        mSynchronousExecutor,
-                        mWorkTaskExecutor,
-                        mConfiguration.getWorkerFactory(),
-                        mMockProgressUpdater,
-                        mMockForegroundUpdater));
-        assertThat(worker, is(notNullValue()));
-        assertThat(worker.isStopped(), is(false));
-
-        WorkerWrapper workerWrapper =
-                createBuilder(work.getStringId()).withWorker(worker).build();
-        mExecutorService.submit(workerWrapper);
-        workerWrapper.interrupt(0);
-        assertThat(worker.isStopped(), is(true));
-        assertThat(mWorkSpecDao.getState(work.getStringId()), is(ENQUEUED));
-    }
-
     // getStopReason() requires API level 31, but only because JobScheduler provides them
     // since API level 31, but in this isolated test we don't care.
     @SuppressLint("NewApi")
     @Test
     @SmallTest
-    public void testInterruptionWithCancellation_isMarkedOnRunningWorker() {
+    public void testInterruption_isMarkedOnRunningWorker() throws InterruptedException {
         OneTimeWorkRequest work =
                 new OneTimeWorkRequest.Builder(InterruptionAwareWorker.class).build();
         insertWork(work);
 
-        ListenableWorker worker = mConfiguration.getWorkerFactory().createWorkerWithDefaultFallback(
+        InterruptionAwareWorker worker = (InterruptionAwareWorker)
+                mConfiguration.getWorkerFactory().createWorkerWithDefaultFallback(
                 mContext.getApplicationContext(),
                 InterruptionAwareWorker.class.getName(),
                 new WorkerParameters(
@@ -1166,6 +1134,7 @@
         WorkerWrapper workerWrapper =
                 createBuilder(work.getStringId()).withWorker(worker).build();
         mExecutorService.submit(workerWrapper);
+        worker.doWorkLatch.await();
         workerWrapper.interrupt(STOP_REASON_CONSTRAINT_CHARGING);
         assertThat(worker.isStopped(), is(true));
         assertThat(worker.getStopReason(), is(STOP_REASON_CONSTRAINT_CHARGING));
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
index bcbe95a..f695ffa 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/greedy/GreedySchedulerTest.java
@@ -167,7 +167,7 @@
         mGreedyScheduler.onConstraintsStateChanged(work.getWorkSpec(), getConstraintsNotMet());
         ArgumentCaptor<StartStopToken> captorToken = ArgumentCaptor.forClass(StartStopToken.class);
         verify(mWorkLauncher)
-                .stopWorkWithReason(captorToken.capture(), eq(getConstraintsNotMet().reasonInt()));
+                .stopWorkWithReason(captorToken.capture(), eq(getConstraintsNotMet().getReason()));
         assertThat(captorToken.getValue().getId().getWorkSpecId()).isEqualTo(work.getWorkSpec().id);
         // doing this check because java vs inline classes
     }
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.kt
index 35fd295..a112b3a 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.kt
@@ -23,7 +23,7 @@
 import androidx.test.filters.SmallTest
 import androidx.work.Constraints
 import androidx.work.OneTimeWorkRequest
-import androidx.work.StopReason
+import androidx.work.WorkInfo
 import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet
 import androidx.work.impl.constraints.ConstraintsState.ConstraintsNotMet
 import androidx.work.impl.constraints.trackers.ConstraintTracker
@@ -72,7 +72,7 @@
     private class TestDeviceIdleConstraintController(
         tracker: ConstraintTracker<Boolean>
     ) : ConstraintController<Boolean>(tracker) {
-        override val reason = StopReason(STOP_REASON_CONSTRAINT_DEVICE_IDLE)
+        override val reason = WorkInfo.STOP_REASON_CONSTRAINT_DEVICE_IDLE
 
         override fun hasConstraint(workSpec: WorkSpec): Boolean {
             return workSpec.constraints.requiresDeviceIdle()
@@ -109,6 +109,5 @@
     }
 }
 
-private val ConstraintsNotMet: ConstraintsNotMet = ConstraintsNotMet(
-    StopReason(STOP_REASON_CONSTRAINT_DEVICE_IDLE)
-)
+private val ConstraintsNotMet: ConstraintsNotMet =
+    ConstraintsNotMet(STOP_REASON_CONSTRAINT_DEVICE_IDLE)
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt b/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt
index a452673..c12af40 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/testutils/TestConstraints.kt
@@ -18,7 +18,7 @@
 
 import android.content.Context
 import androidx.test.core.app.ApplicationProvider
-import androidx.work.StopReason
+import androidx.work.WorkInfo.Companion.STOP_REASON_PREEMPT
 import androidx.work.impl.constraints.ConstraintsState
 import androidx.work.impl.constraints.controllers.ConstraintController
 import androidx.work.impl.constraints.trackers.ConstraintTracker
@@ -57,12 +57,10 @@
     tracker: ConstraintTracker<Boolean>,
     private val constrainedIds: List<String>
 ) : ConstraintController<Boolean>(tracker) {
-    override val reason = StopReason.ConstraintTest
+    // using obscure stop reason for test purposes
+    override val reason = STOP_REASON_PREEMPT
     override fun hasConstraint(workSpec: WorkSpec) = workSpec.id in constrainedIds
     override fun isConstrained(value: Boolean) = !value
 }
 
-val ConstraintsNotMet = ConstraintsState.ConstraintsNotMet(StopReason.ConstraintTest)
-
-val StopReason.Companion.ConstraintTest
-    get() = StopReason(234234234)
+val ConstraintsNotMet = ConstraintsState.ConstraintsNotMet(STOP_REASON_PREEMPT)
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java b/work/work-runtime/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
index cca8f3d..b1a16c6 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
@@ -22,7 +22,10 @@
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
+import java.util.concurrent.CountDownLatch;
+
 public class InterruptionAwareWorker extends Worker {
+    public CountDownLatch doWorkLatch = new CountDownLatch(1);
 
     public InterruptionAwareWorker(@NonNull Context context,
             @NonNull WorkerParameters workerParams) {
@@ -31,6 +34,7 @@
 
     @Override
     public @NonNull Result doWork() {
+        doWorkLatch.countDown();
         try {
             do {
                 Thread.sleep(1000L);
diff --git a/work/work-runtime/src/main/java/androidx/work/ListenableWorker.java b/work/work-runtime/src/main/java/androidx/work/ListenableWorker.java
index 39d098c..4a66bf2 100644
--- a/work/work-runtime/src/main/java/androidx/work/ListenableWorker.java
+++ b/work/work-runtime/src/main/java/androidx/work/ListenableWorker.java
@@ -280,6 +280,7 @@
      * <p>
      * If a worker hasn't been stopped, {@link WorkInfo#STOP_REASON_NOT_STOPPED} is returned.
      */
+    @StopReason
     @RequiresApi(31)
     public final int getStopReason() {
         return mStopReason;
diff --git a/work/work-runtime/src/main/java/androidx/work/Operation.java b/work/work-runtime/src/main/java/androidx/work/Operation.java
index 73c57c5..1eb01b7a 100644
--- a/work/work-runtime/src/main/java/androidx/work/Operation.java
+++ b/work/work-runtime/src/main/java/androidx/work/Operation.java
@@ -16,8 +16,6 @@
 
 package androidx.work;
 
-import android.annotation.SuppressLint;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
 import androidx.lifecycle.LifecycleOwner;
@@ -39,14 +37,12 @@
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     @SuppressWarnings("VariableNameSameAsType")
-    @SuppressLint("SyntheticAccessor")
     State.SUCCESS SUCCESS = new State.SUCCESS();
 
     /**
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     @SuppressWarnings("VariableNameSameAsType")
-    @SuppressLint("SyntheticAccessor")
     State.IN_PROGRESS IN_PROGRESS = new State.IN_PROGRESS();
 
     /**
diff --git a/work/work-runtime/src/main/java/androidx/work/StopReason.kt b/work/work-runtime/src/main/java/androidx/work/StopReason.kt
deleted file mode 100644
index f7629b7..0000000
--- a/work/work-runtime/src/main/java/androidx/work/StopReason.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.work
-
-import android.app.job.JobParameters.STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW
-import android.app.job.JobParameters.STOP_REASON_CONSTRAINT_CHARGING
-import android.app.job.JobParameters.STOP_REASON_CONSTRAINT_CONNECTIVITY
-import android.app.job.JobParameters.STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW
-import androidx.annotation.RestrictTo
-
-@JvmInline
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-value class StopReason internal constructor(val value: Int) {
-    companion object {
-        val ConstraintBatteryNotLow = StopReason(STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW)
-        val ConstraintCharging = StopReason(STOP_REASON_CONSTRAINT_CHARGING)
-        val ConstraintConnectivity = StopReason(STOP_REASON_CONSTRAINT_CONNECTIVITY)
-        val ConstraintStorageNotLow = StopReason(STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW)
-        val Unknown = StopReason(WorkInfo.STOP_REASON_UNKNOWN)
-    }
-}
diff --git a/work/work-runtime/src/main/java/androidx/work/WorkInfo.kt b/work/work-runtime/src/main/java/androidx/work/WorkInfo.kt
index 95a2c52..a6be766 100644
--- a/work/work-runtime/src/main/java/androidx/work/WorkInfo.kt
+++ b/work/work-runtime/src/main/java/androidx/work/WorkInfo.kt
@@ -15,8 +15,12 @@
  */
 package androidx.work
 
+import android.app.job.JobInfo
+import android.app.job.JobScheduler
+import androidx.annotation.IntDef
 import androidx.annotation.IntRange
 import androidx.annotation.RequiresApi
+import androidx.work.WorkInfo.Companion.STOP_REASON_NOT_STOPPED
 import androidx.work.WorkInfo.State
 import java.util.UUID
 
@@ -108,10 +112,7 @@
     val nextScheduleTimeMillis: Long = Long.MAX_VALUE,
 
     /**
-     * The reason why this worker was stopped on the previous run attempt, its value is
-     * one of `android.app.job.JobParameters.STOP_REASON_*`, such as
-     * [android.app.job.JobParameters.STOP_REASON_CONSTRAINT_CONNECTIVITY], or
-     * [STOP_REASON_NOT_STOPPED] if a worker wasn't stopped.
+     * The reason why this worker was stopped on the previous run attempt.
      *
      * For a worker being stopped, at first it should have attempted to run, i.e. its state
      * should be == RUNNING and then [ListenableWorker.onStopped] should have been called,
@@ -122,6 +123,7 @@
      * a worker returns `ListenableWorker.Result.retry()`. In this situation this property will
      * return [STOP_REASON_NOT_STOPPED].
      */
+    @StopReason
     @get:RequiresApi(31)
     val stopReason: Int = STOP_REASON_NOT_STOPPED
 ) {
@@ -256,16 +258,130 @@
         const val STOP_REASON_NOT_STOPPED = -256
 
         /**
-         * Additional stop reason that is used in cases when worker did stop, but the reason for
+         * Stop reason that is used in cases when worker did stop, but the reason for
          * this is unknown. For example, when the app abruptly stopped due to a crash or when a
          * device suddenly ran out of the battery.
-         *
-         * [STOP_REASON_UNKNOWN] is introduced in addition to
-         * [android.app.job.JobParameters.STOP_REASON_UNDEFINED], because `STOP_REASON_UNDEFINED`
-         * is used by JobScheduler in the `JobParameters` object passed to
-         * `JobService#onStartJob(JobParameters)`. Thus it has significantly different meaning
-         * than `STOP_REASON_UNKNOWN`, so we don't want to collide these two situations.
          */
         const val STOP_REASON_UNKNOWN = -512
+
+        /**
+         * The worker was cancelled directly by the app, either by calling cancel methods, e.g.
+         * [WorkManager.cancelUniqueWork], or enqueueing uniquely named worker with
+         * with a policy that cancels an existing worker, e.g. [ExistingWorkPolicy.REPLACE].
+         */
+        const val STOP_REASON_CANCELLED_BY_APP = 1
+
+        /**
+         * The job was stopped to run a higher priority job of the app.
+         */
+        const val STOP_REASON_PREEMPT = 2
+
+        /**
+         * The worker used up its maximum execution time and timed out. Each individual worker
+         * has a maximum execution time limit, regardless of how much total quota the app has.
+         * See the note on [JobScheduler] for the execution time limits.
+         */
+        const val STOP_REASON_TIMEOUT = 3
+
+        /**
+         * The device state (eg. Doze, battery saver, memory usage, etc) requires
+         * WorkManager to stop this worker.
+         */
+        const val STOP_REASON_DEVICE_STATE = 4
+
+        /**
+         * The requested battery-not-low constraint is no longer satisfied.
+         *
+         * @see JobInfo.Builder.setRequiresBatteryNotLow
+         */
+        const val STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW = 5
+
+        /**
+         * The requested charging constraint is no longer satisfied.
+         *
+         * @see JobInfo.Builder.setRequiresCharging
+         */
+        const val STOP_REASON_CONSTRAINT_CHARGING = 6
+
+        /**
+         * The requested connectivity constraint is no longer satisfied.
+         */
+        const val STOP_REASON_CONSTRAINT_CONNECTIVITY = 7
+
+        /**
+         * The requested idle constraint is no longer satisfied.
+         */
+        const val STOP_REASON_CONSTRAINT_DEVICE_IDLE = 8
+
+        /**
+         * The requested storage-not-low constraint is no longer satisfied.
+         */
+        const val STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW = 9
+
+        /**
+         * The app has consumed all of its current quota. Each app is assigned a quota of how much
+         * it can run workers within a certain time frame.
+         * The quota is informed, in part, by app standby buckets.
+         *
+         * @see android.app.job.JobParameters.STOP_REASON_QUOTA
+         */
+        const val STOP_REASON_QUOTA = 10
+
+        /**
+         * The app is restricted from running in the background.
+         *
+         * @see android.app.job.JobParameters.STOP_REASON_BACKGROUND_RESTRICTION
+         */
+        const val STOP_REASON_BACKGROUND_RESTRICTION = 11
+
+        /**
+         * The current standby bucket requires that the job stop now.
+         *
+         * @see android.app.job.JobParameters.STOP_REASON_APP_STANDBY
+         */
+        const val STOP_REASON_APP_STANDBY = 12
+
+        /**
+         * The user stopped the job. This can happen either through force-stop, adb shell commands,
+         * uninstalling, or some other UI.
+         *
+         * @see android.app.job.JobParameters.STOP_REASON_USER
+         */
+        const val STOP_REASON_USER = 13
+
+        /**
+         * The system is doing some processing that requires stopping this job.
+         *
+         * @see android.app.job.JobParameters.STOP_REASON_SYSTEM_PROCESSING
+         */
+        const val STOP_REASON_SYSTEM_PROCESSING = 14
+
+        /**
+         * The system's estimate of when the app will be launched changed significantly enough to
+         * decide this worker shouldn't be running right now.
+         */
+        const val STOP_REASON_ESTIMATED_APP_LAUNCH_TIME_CHANGED = 15
     }
 }
+
+@Retention(AnnotationRetention.SOURCE)
+@IntDef(
+    STOP_REASON_NOT_STOPPED,
+    WorkInfo.STOP_REASON_UNKNOWN,
+    WorkInfo.STOP_REASON_CANCELLED_BY_APP,
+    WorkInfo.STOP_REASON_PREEMPT,
+    WorkInfo.STOP_REASON_TIMEOUT,
+    WorkInfo.STOP_REASON_DEVICE_STATE,
+    WorkInfo.STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW,
+    WorkInfo.STOP_REASON_CONSTRAINT_CHARGING,
+    WorkInfo.STOP_REASON_CONSTRAINT_CONNECTIVITY,
+    WorkInfo.STOP_REASON_CONSTRAINT_DEVICE_IDLE,
+    WorkInfo.STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW,
+    WorkInfo.STOP_REASON_QUOTA,
+    WorkInfo.STOP_REASON_BACKGROUND_RESTRICTION,
+    WorkInfo.STOP_REASON_APP_STANDBY,
+    WorkInfo.STOP_REASON_USER,
+    WorkInfo.STOP_REASON_SYSTEM_PROCESSING,
+    WorkInfo.STOP_REASON_ESTIMATED_APP_LAUNCH_TIME_CHANGED
+)
+internal annotation class StopReason
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/WorkLauncher.kt b/work/work-runtime/src/main/java/androidx/work/impl/WorkLauncher.kt
index 51509e1..f5fdeca 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/WorkLauncher.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/WorkLauncher.kt
@@ -17,6 +17,7 @@
 package androidx.work.impl
 
 import androidx.work.StopReason
+import androidx.work.WorkInfo
 import androidx.work.WorkerParameters
 import androidx.work.WorkerParameters.RuntimeExtras
 import androidx.work.impl.model.WorkSpec
@@ -40,13 +41,13 @@
      * @param workSpecId The [WorkSpec] id to stop
      */
     fun stopWork(workSpecId: StartStopToken) {
-        stopWork(workSpecId, StopReason.Unknown)
+        stopWork(workSpecId, WorkInfo.STOP_REASON_UNKNOWN)
     }
 
-    fun stopWork(workSpecId: StartStopToken, reason: StopReason)
+    fun stopWork(workSpecId: StartStopToken, @StopReason reason: Int)
 
-    fun stopWorkWithReason(workSpecId: StartStopToken, reason: Int) =
-        stopWork(workSpecId, StopReason(reason))
+    fun stopWorkWithReason(workSpecId: StartStopToken, @StopReason reason: Int) =
+        stopWork(workSpecId, reason)
 }
 
 class WorkLauncherImpl(
@@ -58,7 +59,7 @@
         workTaskExecutor.executeOnTaskThread(startWork)
     }
 
-    override fun stopWork(workSpecId: StartStopToken, reason: StopReason) {
+    override fun stopWork(workSpecId: StartStopToken, @StopReason reason: Int) {
         workTaskExecutor.executeOnTaskThread(
             StopWorkRunnable(processor, workSpecId, false, reason)
         )
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/WorkerWrapper.java b/work/work-runtime/src/main/java/androidx/work/impl/WorkerWrapper.java
index 3b11d7a..005515b 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/WorkerWrapper.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/WorkerWrapper.java
@@ -310,7 +310,6 @@
             final String workDescription = mWorkDescription;
             mWorkerResultFuture.addListener(new Runnable() {
                 @Override
-                @SuppressLint("SyntheticAccessor")
                 public void run() {
                     try {
                         // If the ListenableWorker returns a null result treat it as a failure.
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java b/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
index 7f8a419..6d23ba1 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
@@ -244,7 +244,7 @@
             StartStopToken runId = mStartStopTokens.remove(id);
             if (runId != null) {
                 mTimeLimiter.cancel(runId);
-                int reason = ((ConstraintsState.ConstraintsNotMet) state).reasonInt();
+                int reason = ((ConstraintsState.ConstraintsNotMet) state).getReason();
                 mWorkLauncher.stopWorkWithReason(runId, reason);
             }
         }
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/TimeLimiter.kt b/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/TimeLimiter.kt
index fb946b8..7768155 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/TimeLimiter.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/background/greedy/TimeLimiter.kt
@@ -16,9 +16,8 @@
 
 package androidx.work.impl.background.greedy
 
-import android.app.job.JobParameters
 import androidx.work.RunnableScheduler
-import androidx.work.StopReason
+import androidx.work.WorkInfo
 import androidx.work.impl.StartStopToken
 import androidx.work.impl.WorkLauncher
 import java.util.concurrent.TimeUnit
@@ -33,7 +32,7 @@
 
     fun track(token: StartStopToken) {
         val stopRunnable = Runnable {
-            launcher.stopWork(token, StopReason(JobParameters.STOP_REASON_TIMEOUT))
+            launcher.stopWork(token, WorkInfo.STOP_REASON_TIMEOUT)
         }
         synchronized(lock) { tracked.put(token, stopRunnable) }
         runnableScheduler.scheduleWithDelay(timeoutMs, stopRunnable)
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java b/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
index fa27289..dc44577 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
@@ -16,6 +16,23 @@
 
 package androidx.work.impl.background.systemjob;
 
+import static android.app.job.JobParameters.STOP_REASON_APP_STANDBY;
+import static android.app.job.JobParameters.STOP_REASON_BACKGROUND_RESTRICTION;
+import static android.app.job.JobParameters.STOP_REASON_CANCELLED_BY_APP;
+import static android.app.job.JobParameters.STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW;
+import static android.app.job.JobParameters.STOP_REASON_CONSTRAINT_CHARGING;
+import static android.app.job.JobParameters.STOP_REASON_CONSTRAINT_CONNECTIVITY;
+import static android.app.job.JobParameters.STOP_REASON_CONSTRAINT_DEVICE_IDLE;
+import static android.app.job.JobParameters.STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW;
+import static android.app.job.JobParameters.STOP_REASON_DEVICE_STATE;
+import static android.app.job.JobParameters.STOP_REASON_ESTIMATED_APP_LAUNCH_TIME_CHANGED;
+import static android.app.job.JobParameters.STOP_REASON_PREEMPT;
+import static android.app.job.JobParameters.STOP_REASON_QUOTA;
+import static android.app.job.JobParameters.STOP_REASON_SYSTEM_PROCESSING;
+import static android.app.job.JobParameters.STOP_REASON_TIMEOUT;
+import static android.app.job.JobParameters.STOP_REASON_UNDEFINED;
+import static android.app.job.JobParameters.STOP_REASON_USER;
+
 import static androidx.work.impl.background.systemjob.SystemJobInfoConverter.EXTRA_WORK_SPEC_GENERATION;
 import static androidx.work.impl.background.systemjob.SystemJobInfoConverter.EXTRA_WORK_SPEC_ID;
 
@@ -34,6 +51,7 @@
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
+import androidx.work.WorkInfo;
 import androidx.work.WorkerParameters;
 import androidx.work.impl.ExecutionListener;
 import androidx.work.impl.Processor;
@@ -183,7 +201,7 @@
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                 stopReason = Api31Impl.getStopReason(params);
             } else {
-                stopReason = 0;
+                stopReason = WorkInfo.STOP_REASON_UNKNOWN;
             }
             //
             mWorkLauncher.stopWorkWithReason(runId, stopReason);
@@ -258,7 +276,35 @@
 
         @DoNotInline
         static int getStopReason(JobParameters jobParameters) {
-            return jobParameters.getStopReason();
+            return stopReason(jobParameters.getStopReason());
         }
     }
+
+    // making sure that we return only values that WorkManager is aware of.
+    static int stopReason(int jobReason) {
+        int reason;
+        switch (jobReason) {
+            case STOP_REASON_APP_STANDBY:
+            case STOP_REASON_BACKGROUND_RESTRICTION:
+            case STOP_REASON_CANCELLED_BY_APP:
+            case STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW:
+            case STOP_REASON_CONSTRAINT_CHARGING:
+            case STOP_REASON_CONSTRAINT_CONNECTIVITY:
+            case STOP_REASON_CONSTRAINT_DEVICE_IDLE:
+            case STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW:
+            case STOP_REASON_DEVICE_STATE:
+            case STOP_REASON_ESTIMATED_APP_LAUNCH_TIME_CHANGED:
+            case STOP_REASON_PREEMPT:
+            case STOP_REASON_QUOTA:
+            case STOP_REASON_SYSTEM_PROCESSING:
+            case STOP_REASON_TIMEOUT:
+            case STOP_REASON_UNDEFINED:
+            case STOP_REASON_USER:
+                reason = jobReason;
+                break;
+            default:
+                reason = WorkInfo.STOP_REASON_UNKNOWN;
+        }
+        return reason;
+    }
 }
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
index fff7b7a..6cff83d 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.kt
@@ -39,7 +39,8 @@
 sealed class ConstraintsState {
     object ConstraintsMet : ConstraintsState()
     data class ConstraintsNotMet(
-        @get:JvmName("reasonInt") val reason: StopReason
+        @StopReason
+        val reason: Int
     ) : ConstraintsState()
 }
 
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt b/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt
index 4d87576c..78aa5d5 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/constraints/controllers/ContraintControllers.kt
@@ -22,6 +22,7 @@
 import androidx.work.NetworkType.TEMPORARILY_UNMETERED
 import androidx.work.NetworkType.UNMETERED
 import androidx.work.StopReason
+import androidx.work.WorkInfo
 import androidx.work.impl.constraints.ConstraintListener
 import androidx.work.impl.constraints.ConstraintsState
 import androidx.work.impl.constraints.ConstraintsState.ConstraintsMet
@@ -37,7 +38,8 @@
 abstract class ConstraintController<T>(
     private val tracker: ConstraintTracker<T>
 ) {
-    abstract val reason: StopReason
+    @StopReason
+    abstract val reason: Int
     abstract fun hasConstraint(workSpec: WorkSpec): Boolean
     abstract fun isConstrained(value: T): Boolean
 
@@ -65,7 +67,7 @@
  */
 class BatteryChargingController(tracker: ConstraintTracker<Boolean>) :
     ConstraintController<Boolean>(tracker) {
-    override val reason = StopReason.ConstraintCharging
+    override val reason = WorkInfo.STOP_REASON_CONSTRAINT_CHARGING
     override fun hasConstraint(workSpec: WorkSpec) = workSpec.constraints.requiresCharging()
 
     override fun isConstrained(value: Boolean) = !value
@@ -76,7 +78,7 @@
  */
 class BatteryNotLowController(tracker: BatteryNotLowTracker) :
     ConstraintController<Boolean>(tracker) {
-    override val reason = StopReason.ConstraintBatteryNotLow
+    override val reason = WorkInfo.STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW
     override fun hasConstraint(workSpec: WorkSpec) = workSpec.constraints.requiresBatteryNotLow()
 
     override fun isConstrained(value: Boolean) = !value
@@ -87,7 +89,7 @@
  */
 class NetworkUnmeteredController(tracker: ConstraintTracker<NetworkState>) :
     ConstraintController<NetworkState>(tracker) {
-    override val reason = StopReason.ConstraintConnectivity
+    override val reason = WorkInfo.STOP_REASON_CONSTRAINT_CONNECTIVITY
     override fun hasConstraint(workSpec: WorkSpec): Boolean {
         val requiredNetworkType = workSpec.constraints.requiredNetworkType
         return requiredNetworkType == UNMETERED ||
@@ -102,7 +104,7 @@
  */
 class StorageNotLowController(tracker: ConstraintTracker<Boolean>) :
     ConstraintController<Boolean>(tracker) {
-    override val reason = StopReason.ConstraintStorageNotLow
+    override val reason = WorkInfo.STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW
     override fun hasConstraint(workSpec: WorkSpec) = workSpec.constraints.requiresStorageNotLow()
 
     override fun isConstrained(value: Boolean) = !value
@@ -113,7 +115,7 @@
  */
 class NetworkNotRoamingController(tracker: ConstraintTracker<NetworkState>) :
     ConstraintController<NetworkState>(tracker) {
-    override val reason = StopReason.ConstraintConnectivity
+    override val reason = WorkInfo.STOP_REASON_CONSTRAINT_CONNECTIVITY
     override fun hasConstraint(workSpec: WorkSpec): Boolean {
         return workSpec.constraints.requiredNetworkType == NetworkType.NOT_ROAMING
     }
@@ -149,7 +151,7 @@
  */
 class NetworkConnectedController(tracker: ConstraintTracker<NetworkState>) :
     ConstraintController<NetworkState>(tracker) {
-    override val reason = StopReason.ConstraintConnectivity
+    override val reason = WorkInfo.STOP_REASON_CONSTRAINT_CONNECTIVITY
     override fun hasConstraint(workSpec: WorkSpec) =
         workSpec.constraints.requiredNetworkType == NetworkType.CONNECTED
 
@@ -166,7 +168,7 @@
  */
 class NetworkMeteredController(tracker: ConstraintTracker<NetworkState>) :
     ConstraintController<NetworkState>(tracker) {
-    override val reason = StopReason.ConstraintConnectivity
+    override val reason = WorkInfo.STOP_REASON_CONSTRAINT_CONNECTIVITY
     override fun hasConstraint(workSpec: WorkSpec) =
         workSpec.constraints.requiredNetworkType == NetworkType.METERED
 
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.kt b/work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.kt
index 72ca0ad..03bcde4 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/utils/StopWorkRunnable.kt
@@ -18,6 +18,7 @@
 import androidx.annotation.RestrictTo
 import androidx.work.Logger
 import androidx.work.StopReason
+import androidx.work.WorkInfo
 import androidx.work.impl.Processor
 import androidx.work.impl.StartStopToken
 
@@ -29,7 +30,8 @@
     private val processor: Processor,
     private val token: StartStopToken,
     private val stopInForeground: Boolean,
-    private val reason: StopReason,
+    @StopReason
+    private val reason: Int,
 ) : Runnable {
 
     // java compatibility, can't use default args because @JvmOverloads doesn't work with
@@ -38,15 +40,15 @@
         processor: Processor,
         token: StartStopToken,
         stopInForeground: Boolean,
-    ) : this(processor, token, stopInForeground, StopReason.Unknown)
+    ) : this(processor, token, stopInForeground, WorkInfo.STOP_REASON_UNKNOWN)
 
     override fun run() {
         val isStopped = if (stopInForeground) {
-            processor.stopForegroundWork(token, reason.value)
+            processor.stopForegroundWork(token, reason)
         } else {
             // This call is safe to make for foreground work because Processor ignores requests
             // to stop for foreground work.
-            processor.stopWork(token, reason.value)
+            processor.stopWork(token, reason)
         }
         Logger.get().debug(
             Logger.tagWithPrefix("StopWorkRunnable"),
diff --git a/work/work-testing/build.gradle b/work/work-testing/build.gradle
index 97ab4e7..ff9ab66 100644
--- a/work/work-testing/build.gradle
+++ b/work/work-testing/build.gradle
@@ -58,9 +58,4 @@
     defaultConfig {
         multiDexEnabled = true
     }
-    lintOptions {
-        // Too many Kotlin features require synthetic accessors - we want to rely on R8 to
-        // remove these accessors
-        disable("SyntheticAccessor")
-    }
 }