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 } &&"
+ 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 } &&"
+ 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 } &&"
+ 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 &&"
+ 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 &&"
+ 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 &&"
+ 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() &&"
+ 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() &&"
+ 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=" + "Value because identifier " + paramValue.getIdentifier() + " is not ""
+ 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 &&"
+ 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, "Will not start audio generation, since AudioGenerator is disabled.")"
+ 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, "Will not start audio generation, since AudioGenerator is disabled.")"
+ 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, "Will not start audio generation, since AudioGenerator is disabled.")"
+ 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, "start audio generation")"
+ 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, "start audio generation")"
+ 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, "start audio generation")"
+ 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, "Will not stop audio generation, since AudioGenerator is disabled.")"
+ 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, "Will not stop audio generation, since AudioGenerator is disabled.")"
+ 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, "Will not stop audio generation, since AudioGenerator is disabled.")"
+ 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, "stop audio generation")"
+ 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, "stop audio generation")"
+ 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, "stop audio generation")"
+ 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, "playState before stopped: ${audioTrack!!.playState}")"
+ 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, "playState before stopped: ${audioTrack!!.playState}")"
+ 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, "playState before stopped: ${audioTrack!!.playState}")"
+ 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, "playbackHeadPosition before stopped: ${audioTrack!!.playbackHeadPosition}")"
+ 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, "playbackHeadPosition before stopped: ${audioTrack!!.playbackHeadPosition}")"
+ 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, "playbackHeadPosition before stopped: ${audioTrack!!.playbackHeadPosition}")"
+ 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, "The input frequency should not be negative.")"
+ 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, "The input frequency should not be negative.")"
+ 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, "The beep length should not be negative.")"
+ 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, "The beep length should not be negative.")"
+ 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, "Will not initial audio track, since AudioGenerator is disabled.")"
+ 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, "Will not initial audio track, since AudioGenerator is disabled.")"
+ 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, "Will not initial audio track, since AudioGenerator is disabled.")"
+ 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, "initAudioTrack with sample rate: $sampleRate")"
+ 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, "initAudioTrack with sample rate: $sampleRate")"
+ 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, "initAudioTrack with sample rate: $sampleRate")"
+ 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, "initAudioTrack with beep frequency: $frequency")"
+ 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, "initAudioTrack with beep frequency: $frequency")"
+ 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, "initAudioTrack with beep frequency: $frequency")"
+ 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, "initAudioTrack with buffer size: $bufferSize")"
+ 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, "initAudioTrack with buffer size: $bufferSize")"
+ 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, "initAudioTrack with buffer size: $bufferSize")"
+ 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, "Camera binding failed", 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, "Camera binding failed", 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, "Camera binding failed", 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, "Camera binding failed", 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, "Failed to create directory: $videoFolder")"
+ 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, "Failed to create directory: $videoFolder")"
+ 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, "Failed to create directory: $videoFolder")"
+ 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, "Video saved to: $uri")"
+ 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, "Video saved to: $uri")"
+ 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, "Video saved to: $uri")"
+ 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, "Failed to save video: $msg")"
+ 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, "Failed to save video: $msg")"
+ 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, "Failed to save video: $msg")"
+ 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, "Start signal generation.")"
+ 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, "Start signal generation.")"
+ 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, "Start signal generation.")"
+ 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, "Stop signal generation.")"
+ 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, "Stop signal generation.")"
+ 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, "Stop signal generation.")"
+ 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, "Start recording.")"
+ 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, "Start recording.")"
+ 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, "Start recording.")"
+ 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, "Stop recording.")"
+ 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, "Stop recording.")"
+ 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, "Stop recording.")"
+ 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, "Pause recording.")"
+ 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, "Pause recording.")"
+ 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, "Pause recording.")"
+ 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, "Resume recording.")"
+ 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, "Resume recording.")"
+ 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, "Resume recording.")"
+ 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 <= 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 && 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 `<uses-feature android:name="android.hardware.camera" required="false">` tag"
errorLine1=" <uses-permission android:name="android.permission.CAMERA" />"
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, "Cannot get the preview view.");"
+ 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, "Cannot get the preview view.");"
+ 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, "Cannot get the preview view.");"
+ 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, "Cannot get the duration text view.");"
+ 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, "Cannot get the duration text view.");"
+ 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, "Cannot get the duration text view.");"
+ 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, "Cannot get the switch time text view.");"
+ 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, "Cannot get the switch time text view.");"
+ 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, "Cannot get the switch time text view.");"
+ 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, "Cannot get the start button view.");"
+ 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, "Cannot get the start button view.");"
+ 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, "Cannot get the start button view.");"
+ 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, "The camera instance should not be null.");"
+ 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, "The camera instance should not be null.");"
+ 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, "The camera instance should not be null.");"
+ 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, "The camera provider should not be null");"
+ 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, "The camera provider should not be null");"
+ 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, "The camera provider should not be null");"
+ 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, "The preview use case should not be null.");"
+ 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, "The preview use case should not be null.");"
+ 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, "The preview use case should not be null.");"
+ 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, "The video capture use case should not be null.");"
+ 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, "The video capture use case should not be null.");"
+ 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, "The video capture use case should not be null.");"
+ 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, "The video capture use case should not be null.");"
+ 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, "The video capture use case should not be null.");"
+ 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, "The video capture use case should not be null.");"
+ 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, "mp4"));"
+ 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, "mp4"));"
+ 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, "mp4"));"
+ 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, "The in-progress ""
+ 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, "The in-progress ""
+ 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, "The in-progress ""
+ 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), "txt");"
+ 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), "txt");"
+ 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 && !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 && !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=" "Not working on Calibration Thread")"
+ 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<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<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=" "take picture button is only enabled when session is configured successfully""
+ 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, "Failed to bind use cases.", 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, "Failed to bind use cases.", 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, "Failed to bind use cases.", 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, "Failed to bind use cases.", 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 && 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=" "Video saved to: $uri""
+ 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=" "Failed to save video: uri $uri with code (${event.error})""
+ 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=" "Invalid status and value combo: " + 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(), "Message list cannot be empty.");"
+ 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(), "Message list cannot be empty.");"
+ 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 'slots' with type Function2<? 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 'measurePolicy' with type Function2<? 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 'slots' with type Function2<? 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 'lineOf' with type Function1<? 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<Density, Constraints, LazyGridSlots> of 'rememberColumnWidthSums'."
- 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<Density, Constraints, LazyGridSlots> of 'rememberRowHeightSums'."
- 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 'calculation' with type Function2<? 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 'slots' with type Function2<? 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 'measurePolicy' with type Function2<? 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<Density, Constraints, LazyStaggeredGridSlots> of 'rememberColumnSlots'."
- 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<Density, Constraints, LazyStaggeredGridSlots> of 'rememberRowSlots'."
- 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 'calculation' with type Function2<? 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 'slots' with type Function2<? 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<LazyLayoutMeasureScope, Constraints, LazyStaggeredGridMeasureResult> of 'rememberStaggeredGridMeasurePolicy'."
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=" "'$key' must be unique. Actual [ [${value.joinToString()}]""
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 'merger' with type Function2<? 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 << (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 << (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 << (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 << (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<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<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<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()) { "start time must be set" }"
+ 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()) { "end time must be set" }"
+ 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()) { "start time must be set" }"
+ 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()) { "end time must be set" }"
+ 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["segments"]?.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["segments"]?.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["laps"]?.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["laps"]?.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["route"]?.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["route"]?.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["hasRoute"]?.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["hasRoute"]?.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["hasRoute"]?.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["hasRoute"]?.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["biotin"]?.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["biotin"]?.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["biotin"]?.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["biotin"]?.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["caffeine"]?.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["caffeine"]?.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["caffeine"]?.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["caffeine"]?.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["calcium"]?.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["calcium"]?.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["calcium"]?.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["calcium"]?.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["calories"]?.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["calories"]?.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["calories"]?.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["calories"]?.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["caloriesFromFat"]?.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["caloriesFromFat"]?.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["caloriesFromFat"]?.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["caloriesFromFat"]?.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["chloride"]?.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["chloride"]?.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["chloride"]?.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["chloride"]?.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["cholesterol"]?.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["cholesterol"]?.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["cholesterol"]?.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["cholesterol"]?.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["chromium"]?.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["chromium"]?.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["chromium"]?.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["chromium"]?.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["copper"]?.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["copper"]?.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["copper"]?.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["copper"]?.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["dietaryFiber"]?.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["dietaryFiber"]?.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["dietaryFiber"]?.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["dietaryFiber"]?.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["folate"]?.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["folate"]?.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["folate"]?.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["folate"]?.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["folicAcid"]?.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["folicAcid"]?.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["folicAcid"]?.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["folicAcid"]?.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["iodine"]?.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["iodine"]?.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["iodine"]?.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["iodine"]?.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["iron"]?.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["iron"]?.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["iron"]?.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["iron"]?.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["magnesium"]?.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["magnesium"]?.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["magnesium"]?.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["magnesium"]?.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["manganese"]?.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["manganese"]?.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["manganese"]?.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["manganese"]?.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["molybdenum"]?.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["molybdenum"]?.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["molybdenum"]?.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["molybdenum"]?.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["monounsaturatedFat"]?.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["monounsaturatedFat"]?.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["monounsaturatedFat"]?.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["monounsaturatedFat"]?.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["niacin"]?.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["niacin"]?.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["niacin"]?.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["niacin"]?.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["pantothenicAcid"]?.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["pantothenicAcid"]?.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["pantothenicAcid"]?.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["pantothenicAcid"]?.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["phosphorus"]?.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["phosphorus"]?.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["phosphorus"]?.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["phosphorus"]?.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["polyunsaturatedFat"]?.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["polyunsaturatedFat"]?.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["polyunsaturatedFat"]?.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["polyunsaturatedFat"]?.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["potassium"]?.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["potassium"]?.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["potassium"]?.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["potassium"]?.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["protein"]?.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["protein"]?.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["protein"]?.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["protein"]?.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["riboflavin"]?.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["riboflavin"]?.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["riboflavin"]?.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["riboflavin"]?.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["saturatedFat"]?.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["saturatedFat"]?.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["saturatedFat"]?.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["saturatedFat"]?.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["selenium"]?.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["selenium"]?.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["selenium"]?.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["selenium"]?.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["sodium"]?.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["sodium"]?.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["sodium"]?.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["sodium"]?.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["sugar"]?.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["sugar"]?.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["sugar"]?.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["sugar"]?.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["thiamin"]?.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["thiamin"]?.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["thiamin"]?.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["thiamin"]?.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["totalCarbohydrate"]?.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["totalCarbohydrate"]?.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["totalCarbohydrate"]?.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["totalCarbohydrate"]?.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["totalFat"]?.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["totalFat"]?.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["totalFat"]?.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["totalFat"]?.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["transFat"]?.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["transFat"]?.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["transFat"]?.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["transFat"]?.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["unsaturatedFat"]?.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["unsaturatedFat"]?.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["unsaturatedFat"]?.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["unsaturatedFat"]?.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["vitaminA"]?.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["vitaminA"]?.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["vitaminA"]?.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["vitaminA"]?.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["vitaminB12"]?.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["vitaminB12"]?.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["vitaminB12"]?.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["vitaminB12"]?.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["vitaminB6"]?.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["vitaminB6"]?.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["vitaminB6"]?.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["vitaminB6"]?.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["vitaminC"]?.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["vitaminC"]?.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["vitaminC"]?.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["vitaminC"]?.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["vitaminD"]?.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["vitaminD"]?.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["vitaminD"]?.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["vitaminD"]?.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["vitaminE"]?.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["vitaminE"]?.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["vitaminE"]?.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["vitaminE"]?.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["vitaminK"]?.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["vitaminK"]?.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["vitaminK"]?.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["vitaminK"]?.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["zinc"]?.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["zinc"]?.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["zinc"]?.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["zinc"]?.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["stages"]?.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["stages"]?.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("Unknown data type ${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=" else -> throw RuntimeException("Unknown data type ${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=" else -> throw RuntimeException("Unknown data type ${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=" else -> throw RuntimeException("Unknown data type ${dataType.name}")"
+ 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["latitude"]!!.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["latitude"]!!.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["latitude"]!!.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["latitude"]!!.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["longitude"]!!.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["longitude"]!!.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["longitude"]!!.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["longitude"]!!.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["altitude"]?.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["altitude"]?.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["altitude"]?.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["altitude"]?.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["horizontal_accuracy"]?.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["horizontal_accuracy"]?.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["horizontal_accuracy"]?.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["horizontal_accuracy"]?.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["vertical_accuracy"]?.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["vertical_accuracy"]?.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["vertical_accuracy"]?.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["vertical_accuracy"]?.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["stage"]?.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["stage"]?.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["stage"]?.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["stage"]?.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["type"]?.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["type"]?.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["type"]?.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["type"]?.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["reps"]?.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["reps"]?.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["reps"]?.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["reps"]?.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["length"]?.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["length"]?.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["length"]?.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["length"]?.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["latitude"]?.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["latitude"]?.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["latitude"]?.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["latitude"]?.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["longitude"]?.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["longitude"]?.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["longitude"]?.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["longitude"]?.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["altitude"]?.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["altitude"]?.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["altitude"]?.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["altitude"]?.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["horizontal_accuracy"]?.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["horizontal_accuracy"]?.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["horizontal_accuracy"]?.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["horizontal_accuracy"]?.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["vertical_accuracy"]?.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["vertical_accuracy"]?.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["vertical_accuracy"]?.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["vertical_accuracy"]?.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("BasalBodyTemperature"))"
+ 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("temperature", 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("measurementLocation", 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("BasalMetabolicRate"))"
+ 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("bmr", 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("BloodGlucose"))"
+ 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("level", 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("specimenSource", 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("mealType", 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("relationToMeal", 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("BloodPressure"))"
+ 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("systolic", 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("diastolic", 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("bodyPosition", 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("measurementLocation", 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("BodyFat"))"
+ 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("percentage", 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("BodyTemperature"))"
+ 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("temperature", 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("measurementLocation", 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("BodyWaterMass"))"
+ 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("mass", 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("BoneMass"))"
+ 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("mass", 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("CervicalMucus"))"
+ 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("texture", 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("amount", 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("rpm", 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("bpm", 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("Height"))"
+ 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("height", 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("HeartRateVariabilityRmssd"))"
+ 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("heartRateVariability", 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("IntermenstrualBleeding")).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("IntermenstrualBleeding")).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("LeanBodyMass"))"
+ 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("mass", 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("Menstruation"))"
+ 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("flow", 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("MenstruationPeriod")).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("MenstruationPeriod")).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("OvulationTest"))"
+ 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("result", 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("OxygenSaturation"))"
+ 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("percentage", 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("power", 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("RespiratoryRate"))"
+ 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("rate", 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("RestingHeartRate"))"
+ 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("bpm", 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("SexualActivity"))"
+ 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("protectionUsed", 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("speed", 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("rate", 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("Vo2Max"))"
+ 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("vo2", 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("measurementMethod", 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("Weight"))"
+ 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("weight", 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("ActiveCaloriesBurned"))"
+ 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("energy", 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("ActivitySession"))"
+ 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("hasRoute", 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("activityType", 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("title", 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("notes", 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("Distance"))"
+ 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("distance", 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("ElevationGained"))"
+ 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("elevation", 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("FloorsClimbed"))"
+ 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("floors", 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("Hydration"))"
+ 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("volume", 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("Nutrition"))"
+ 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("biotin", 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("caffeine", 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("calcium", 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("calories", 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("caloriesFromFat", 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("chloride", 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("cholesterol", 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("chromium", 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("copper", 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("dietaryFiber", 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("folate", 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("folicAcid", 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("iodine", 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("iron", 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("magnesium", 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("manganese", 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("molybdenum", 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("monounsaturatedFat", 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("niacin", 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("pantothenicAcid", 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("phosphorus", 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("polyunsaturatedFat", 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("potassium", 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("protein", 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("riboflavin", 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("saturatedFat", 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("selenium", 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("sodium", 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("sugar", 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("thiamin", 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("totalCarbohydrate", 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("totalFat", 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("transFat", 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("unsaturatedFat", 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("vitaminA", 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("vitaminB12", 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("vitaminB6", 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("vitaminC", 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("vitaminD", 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("vitaminE", 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("vitaminK", 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("zinc", 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("mealType", 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("name", 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("SleepSession"))"
+ 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("title", 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("notes", 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("SleepStage"))"
+ 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("stage", 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("Steps"))"
+ 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("count", 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("TotalCaloriesBurned"))"
+ 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("energy", 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("WheelchairPushes"))"
+ 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("count", 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("stage", 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("type", 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("reps", 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("length", 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("latitude", 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("longitude", 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("horizontal_accuracy", 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("vertical_accuracy", 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("altitude", 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<>();"
+ 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<LiveData<?>, Source<?>> mSources = new SafeIterableMap<>();"
+ 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<?> 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<?> 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<?> 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<?> 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<?> 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<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 < targetState && 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 < state && !newEventOccurred && 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 && !newEventOccurred && 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 < 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=" && 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<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=" && 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("A Googler");"
+ 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("Diving with Sharks Trailer");"
+ 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("android.resource://com.example.android.leanback/""
+ 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("A Googler");"
+ 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("Diving with Sharks Trailer");"
+ 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("android.resource://com.example.android.leanback/""
+ 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=" "Provided content URI " + resource.getContentUri() + " cannot be opened");"
+ 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=" "Cannot read from URI " + 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=" "Cannot open file for URI " + 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=" "Error while reading URI " + 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<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 && 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() && 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=" && 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=" && 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=" && 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=" && 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=" && 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=" && 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=" && 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=" && 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=" && 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=" && 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=" && 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() && !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() && !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 && 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<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 && 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 && 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() && !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=" && 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=" && 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=" "ImageDimension has an unknown dimension type: " + 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=" && 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=" && 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=" && 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() && 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() && 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=" && 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=" && 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, "No node ID for " + 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, "Unknown child type: " + 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, "Error inflating " + 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, "No node ID for " + 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() && 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() && 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() && 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() && 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() && 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() && 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() && 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() && 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() && 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() && 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() && 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() && 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<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<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 && 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 && 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 && 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 && 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() && 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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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() && !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<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() <= 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=" && timeMillis < 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() <= timeMillis && timeMillis < 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 && timeMillis < 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() && 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() && 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() && 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=" < 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().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() < 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<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<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<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<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<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<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<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 < 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 < 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 < 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 < 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<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")
- }
}